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ニュース 2025年1月23日 5G Americasの新ホワイトペーパー「AI時代のセルラーネットワークの信頼性とセキュリティ」、KyoceraAVXの新薄膜フィルタ、TDKの車載/一般用C0G特性1,250V 3225サイズMLCC、Semtechの5G LPWAモジュール(2025.01.23)
- 高周波・RFニュース 2025年1月22日 everythingRFマガジンにMarkiの宇宙向けミリ波部品の記事、NordicのRF52810を使った太陽電池で動き暗闇でも3週間持つアセットトトラッカー、KnowlessのMRIの技術解説記事、Broadcomの3.5Dパッケージング解説(2025.01.22)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(3) 3D画面に補間(Interpolate) を行って表示する。リニア、3次スプライン、有理関数などいろいろ使える。(2025.01.23)
コメント