goo blog サービス終了のお知らせ 

Java エクセルVBAのサンプル

浮かんだ、JavaとVBAのサンプルを備忘録として、残しておこうかな、
コードを利用するときは自己責任にてよろしく

複素行列の掛け算

2009-01-25 08:50:04 | Weblog

前日に複素行列の逆行列を作ってみましたが、
これだけでは、不便なのです。
複素行列の掛け算があると便利です。
足し算とマイナス関数は、前日の複素数の逆行列に含まれています。
以上のアイテムを利用して、複素行列の掛け算を
作ってみました。

(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,リターンをお忘れなく

最新の画像もっと見る