XLPack 7.0
XLPack 数値計算ライブラリ (Excel VBA) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ Dgtsv()

Sub Dgtsv ( N As  Long,
Dl() As  Double,
D() As  Double,
Du() As  Double,
B() As  Double,
Info As  Long,
Optional Nrhs As  Long = 1 
)

(シンプルドライバ) 連立一次方程式 AX = B の解 (一般3重対角行列)

目的
本ルーチンは次の連立一次方程式を解く.
A * X = B
ここで, Aはn×n 3重対角行列である. ピボットの部分選択を行うガウスの消去法を使用する.
引数DuとDlを入れ替えることにより, 方程式 A^T*X = B を解くこともできる.
引数
[in]N行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in,out]Dl()配列 Dl(LDl - 1) (LDl >= N - 1)
[in] AのN-1個の下副対角要素.
[out] AのLU分解により得られる上三角行列UのN-2個の第2上副対角要素が Dl(0), ..., Dl(n-3) のように入る.
[in,out]D()配列 D(LD - 1) (LD >= N)
[in] A の対角要素.
[out] U の対角要素.
[in,out]Du()配列 Du(LDu - 1) (LDu >= N - 1)
[in] A のN-1個の上副対角要素.
[out] U のN-1個の上副対角要素.
[in,out]B()配列 B(LB1 - 1, LB2 - 1) (LB1 >= max(1, N), LB2 >= Nrhs) (2次元配列) または B(LB - 1) (LB >= max(1, N), Nrhs = 1) (1次元配列)
[in] N×Nrhs右辺行列 B.
[out] Info = 0 の場合, N×Nrhs解行列 X.
[out]Info= 0: 正常終了.
= -1: パラメータ N の誤り. (N < 0)
= -2: パラメータ Dl() の誤り.
= -3: パラメータ D() の誤り.
= -4: パラメータ Du() の誤り.
= -5: パラメータ B() の誤り.
= -7: パラメータ Nrhs の誤り. (Nrhs < 0, または, Nrhs <> 1 かつ B()が1次元配列)
= i > 0: Uのi番目の対角要素が0であり解は計算されなかった. i = n でない限り分解は完了していない.
[in]Nrhs(省略可)
右辺の数, すなわち, 行列Bの列数. (Nrhs >= 0) (Nrhs = 0 の場合, 処理を行わずに戻る) (省略時 = 1)
出典
LAPACK
使用例
連立一次方程式 Ax = B を解く. ただし,
( -0.58 1.14 0 ) ( -0.5960 )
A = ( -1.56 2.21 0.16 ), B = ( -0.6798 )
( 0 0.24 0.25 ) ( -0.0406 )
とする.
Sub Ex_Dgtsv()
Const N = 3
Dim Dl(N - 2) As Double, D(N - 1) As Double, Du(N - 2) As Double
Dim B(N - 1) As Double, Info As Long
Dl(0) = -1.56: Dl(1) = 0.24
D(0) = -0.58: D(1) = 2.21: D(2) = 0.25
Du(0) = 1.14: Du(1) = 0.16
B(0) = -0.596: B(1) = -0.6798: B(2) = -0.0406
Call Dgtsv(N, Dl(), D(), Du(), B(), Info)
Debug.Print "X =", B(0), B(1), B(2)
Debug.Print "Info =", Info
End Sub
Sub Dgtsv(N As Long, Dl() As Double, D() As Double, Du() As Double, B() As Double, Info As Long, Optional Nrhs As Long=1)
(シンプルドライバ) 連立一次方程式 AX = B の解 (一般3重対角行列)
実行結果
X = -0.82 -0.94 0.74
Info = 0