前日に複素行列の逆行列を作ってみましたが、
これだけでは、不便なのです。
複素行列の掛け算があると便利です。
足し算とマイナス関数は、前日の複素数の逆行列に含まれています。
以上のアイテムを利用して、複素行列の掛け算を
作ってみました。
(a+bi)(c+di)=ac-bd+(ad+bc)i
となり、二つの複素数のa,b,c,dを求めれば、後は、エクセルの
行列の積を利用すれば良い事がわかります。
Public Function IMMult(aa As Variant, bb As Variant) As Variant Dim a As Variant, b As Variant Dim ra() As Double, ia() As Double, rb() As Double, ib() As Double Dim la1 As Integer, ua1 As Integer, la2 As Integer, ua2 As Integer Dim lb1 As Integer, ub1 As Integer, lb2 As Integer, ub2 As Integer Dim i As Integer, j As Integer Dim rr As Variant, ii As Variant Dim ccc As Variant a = aa b = bb la1 = LBound(a, 1) ua1 = UBound(a, 1) la2 = LBound(a, 2) ua2 = UBound(a, 2) lb1 = LBound(b, 1) ub1 = UBound(b, 1) lb2 = LBound(b, 2) ub2 = UBound(b, 2) ReDim ra(la1 To ua1, la2 To ua2), ia(la1 To ua1, la2 To ua2) ReDim rb(lb1 To ub1, lb2 To ub2), ib(lb1 To ub1, lb2 To ub2) For i = la1 To ua1 For j = la2 To ua2 ra(i, j) = ImReal(a(i, j)) ia(i, j) = Imaginary(a(i, j)) Next Next For i = lb1 To ub1 For j = lb2 To ub2 rb(i, j) = ImReal(b(i, j)) ib(i, j) = Imaginary(b(i, j)) Next Next rr = add(WorksheetFunction.MMult(ra, rb), negamtrix(WorksheetFunction.MMult(ia, ib))) ii = add(WorksheetFunction.MMult(ia, rb), WorksheetFunction.MMult(ra, ib)) la1 = LBound(rr, 1) ua1 = UBound(rr, 1) la2 = LBound(rr, 2) ua2 = UBound(rr, 2) ReDim ccc(la1 To ua1, la2 To ua2) For i = la1 To ua1 For j = la2 To ua2 ccc(i, j) = Complex(rr(i, j), ii(i, j)) Next Next IMMult = ccc End Function
以上が、複素行列の積になります。前日の逆行列を求めるときに使った
関数も使っているで、前日のソースに今回のソースを足して使ってみてください。
これも、配列変数を使っているので、shift+ctrl,リターンをお忘れなく