« 住吉神社でお参り。 | トップページ | 陰的ルンゲクッタ法(ラダウIIA)をExcel VBAに移植した。 »

2010年7月 3日 (土)

Excel VBAにNumerical RecipesのLU分解ライブラリを移植して連立方程式を計算

連立一次方程式を解くプログラムがちょっと必要になって、ニューメリカルレシピに載っていたLU分解のライブラリを移植してみた。

ソースはこちら↓

「Matrix.txt」をダウンロード

使い方は、まずax = bを解きたいとき、

とりあえずconst のnに行列の大きさを定義しておいて、

    Dim a(n,n) as double

    Dim b(n) as double

    で行列、ベクトルを定義。

    Call ludcmp(a, indx, d)
    Call lubksb(a, indx, b)

とするとbにxの値が入る。てことで、aとbは呼び出すと破壊されます(もともとそういう仕様)。

もっと簡単には 

  Call linsolve(a,b)

を勝手に用意しましたよ。

ついでに逆行列も

    Call invmat(a)

行列式も

   d = det(a)

なんかで計算できます。ご承知の通り、一切エラーチェックをしてないので、不具合が出ても責任はもてません。。。

こんな感じで使う。

Sub ボタン1_Click()
    Dim a(n, n) As Double
    Dim indx(n) As Integer
    Dim b(n) As Double
    Dim d As Double
    Dim i As Integer, j As Integer

   
    For i = 1 To n
        For j = 1 To n
            a(i, j) = 0#
        Next j
    Next i
   
    a(1, 1) = 5#
    a(1, 2) = 10#
    a(1, 3) = 14#

    a(2, 1) = 3#
    a(2, 2) = 8#
    a(2, 3) = 2#

    a(3, 1) = 2#
    a(3, 2) = 5#
    a(3, 3) = 4#
   
    b(1) = 15
    b(2) = 1
    b(3) = 6
   
    Call linsolve(a, b)

    For i = 1 To n
        For j = 1 To n
            Worksheets("Sheet1").Cells(i, j) = a(i, j)
        Next j
    Next i
   
    For i = 1 To n
        Worksheets("Sheet1").Cells(i, n + 4) = b(i)
    Next i
   
End Sub

« 住吉神社でお参り。 | トップページ | 陰的ルンゲクッタ法(ラダウIIA)をExcel VBAに移植した。 »

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

コメント

コメントを書く

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

トラックバック

« 住吉神社でお参り。 | トップページ | 陰的ルンゲクッタ法(ラダウIIA)をExcel VBAに移植した。 »

最近の記事

最近のコメント

2025年1月
      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  
フォト
無料ブログはココログ