« Silicon LabsのThunderboard™ React Derby ミニチュア・カー・キットに衝撃を受ける、、、Bluetooth+センサのキットとくればロボットカーと思いきや、、、 | トップページ | Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その4:フィッティング(線形) »

2018年2月 7日 (水)

Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その3: ガウス・ジョルダンの消去法(複素数)

今回は3回目でガウス・ジョルダンの消去法(複素数)。
Aをnxn行列、bをnxm行列として、
Ax=bとなるxを計算します。
そして計算したあとのAはもとのAの逆行列で上書きされ、
bは答えのxで上書きされます。
Sub gaussj(ByRef a() As Double, N As Integer, ByRef b() As Double, M As Integer)
Sub Cgaussj(ByRef a() As Complex, N As Integer, ByRef b() As Complex, M As Integer)
実数の場合は
    Dim n as Integer
    Dim Amat() as Double, Bvec() as Double
    n = 4
    ReDim Amat(n, n)
    ReDim Bvec(n, 1)
 
    Amat(1, 1) = 1
    Amat(2, 1) = 1
    Amat(3, 1) = 1
    Amat(4, 1) = 1
 
    Amat(1, 2) = 1
    Amat(2, 2) = 1
    Amat(3, 2) = 1
    Amat(4, 2) = -1
 
    Amat(1, 3) = 1
    Amat(2, 3) = 1
    Amat(3, 3) = -1
    Amat(4, 3) = 1
 
    Amat(1, 4) = 1
    Amat(2, 4) = -1
    Amat(3, 4) = 1
    Amat(4, 4) = 1
 
    Bvec(1, 1) = 0
    Bvec(2, 1) = 4
    Bvec(3, 1) = -4
    Bvec(4, 1) = 2
 
    Call gaussj(Amat, n, Bvec, 1)
 
    For i = 1 To n
        Debug.Print Bvec(i, 1)
    Next i
のように計算できます。
複素数の場合は、
    ReDim A(n, n)
    ReDim b(n, 1)
 
    A(1, 1) = ToComplex(1, 0)
    A(2, 1) = ToComplex(1, 0)
    A(3, 1) = ToComplex(1, 0)
    A(4, 1) = ToComplex(1, 0)
 
    A(1, 2) = ToComplex(1, 0)
    A(2, 2) = ToComplex(1, 0)
    A(3, 2) = ToComplex(1, 0)
    A(4, 2) = ToComplex(-1, 0)
 
    A(1, 3) = ToComplex(1, 0)
    A(2, 3) = ToComplex(1, 0)
    A(3, 3) = ToComplex(-1, 0)
    A(4, 3) = ToComplex(1, 0)
 
    A(1, 4) = ToComplex(1, 0)
    A(2, 4) = ToComplex(-1, 0)
    A(3, 4) = ToComplex(1, 0)
    A(4, 4) = ToComplex(1, 0)
 
    b(1, 1) = ToComplex(0, 0)
    b(2, 1) = ToComplex(4, 2)
    b(3, 1) = ToComplex(-4, -2)
    b(4, 1) = ToComplex(2, 1)
    Call Cgaussj(A, CInt(n), b, 1)
 
    For i = 1 To n
        Debug.Print b(i, 1).x & "+i" & b(i, 1).y
    Next i
 
    For i = 1 To n
        For j = 1 To n
            Debug.Print A(i, j).x & "+i" & A(i, j).y
        Next j
    Next i
ライブラリ本体:
またルンゲクッタ8次のDOP853ルーチンとそのドライバ。
メルセンヌツイスタ用

« Silicon LabsのThunderboard™ React Derby ミニチュア・カー・キットに衝撃を受ける、、、Bluetooth+センサのキットとくればロボットカーと思いきや、、、 | トップページ | Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その4:フィッティング(線形) »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Silicon LabsのThunderboard™ React Derby ミニチュア・カー・キットに衝撃を受ける、、、Bluetooth+センサのキットとくればロボットカーと思いきや、、、 | トップページ | Excel VBAで複素数演算(一次方程式・FFT他, Numerical Recipes移植)、フィッティング(非線形含む)、ルンゲクッタ8次(DOP853)などが使えるライブラリ その4:フィッティング(線形) »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ