Excel VBAにNumerical RecipesのLU分解ライブラリを移植して連立方程式を計算
連立一次方程式を解くプログラムがちょっと必要になって、ニューメリカルレシピに載っていたLU分解のライブラリを移植してみた。
ソースはこちら↓
使い方は、まず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に移植した。 »
「学問・資格」カテゴリの記事
- 高周波(RF・マイクロ波・ミリ波・5G)関連ニュース2021年2月16日 IEEE Microwave Magazineの特集はオールデジタルのRFID、Microwave JournalはEバンド ミリ波通信に衛星や気球を使う話、アメリカの半導体企業がバイデンに投資を迫る、(2021.02.17)
- カオスを生じる電気回路、Chua’s circuitをLTspiceで回路シミュレーションしてみる。(2021.02.19)
- Labyrinth Chaos(迷宮カオス)を生むThomas-Rössler方程式のパラメータbを色々変えて、Python+Scipyでルンゲクッタ8次のDOP853(Dormand&Prince)を使って計算してGIFアニメ(2021.02.16)
- フィッツヒュー・南雲 (FitzHugh-Nagumo) 方程式をPython+Scipyでルンゲクッタ8次のDOP853(Dormand Prince)で計算。(2021.02.23)
- 「水晶振動子の等価回路計算」をカシオの高精度計算サイトkeisan.casio.jpの自作式としてUP! インピーダンスの大きさと位相がグラフ化できる。(2021.02.12)
コメント