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

◆ Bicg1()

Sub Bicg1 ( N As  Long,
Val() As  Double,
Rowptr() As  Long,
Colind() As  Long,
B() As  Double,
X() As  Double,
Optional Info As  Long,
Optional Iter As  Long,
Optional Res As  Double,
Optional MaxIter As  Long = 500,
Optional Tol As  Double = 1.0E-10 
)

双共役勾配(BICG)法による連立一次方程式 Ax = b の解 (シンプルドライバ)

目的
双共役勾配(BICG)法により連立一次方程式 Ax = b の解を求める. 行列 A は CSR 形式で表される.
引数
[in]N行列 A の次数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る)
[in]Val()配列 Val(LVal - 1) (LVal >= Nnz) (Nnz は行列 A の非ゼロ要素数)
行列 A の非ゼロ要素の値.
[in]Rowptr()配列 Rowptr(LRowptr - 1) (LRowptr >= N + 1)
行列 A の行ポインタ.
[in]Colind()配列 Colind(LColind - 1) (LColind >= Nnz)
行列 A の列インデクス.
[in]B()配列 B(LB - 1) (LB >= N)
右辺ベクトル b.
[in,out]X()配列 X(LX - 1) (LX >= N)
[in] 解の初期推定値.
[out] 求められた近似解.
[out]Info(省略可)
= 0: 正常終了.
= i < 0: (-i)番目の入力パラメータの誤り.
= 11: 最大反復回数を超えた.
= 12: ブレークダウンが発生した.
[out]Iter(省略可)
収束時の反復回数.
[out]Res(省略可)
最終的な残差ノルム norm(b - A*x) の値.
[in]MaxIter(省略可)
最大反復回数. (MaxIter > 0) (省略時 = 500)
[in]Tol(省略可)
収束判定基準値. (省略時 = 1.0e-10)
norm(b - A*x) <= Tol*norm(b) であれば収束とみなす.
Tol < eps (マシンイプシロン) であれば Tol = eps とみなす.
インデクス形式は, Rowptr(0) = 1 であれば 0-ベース(C形式), そうでなければ 1-ベース(Fortran形式) とみなす.
使用例
連立一次方程式 Ax = B を解く. ただし,
( 0.2 -0.11 -0.93 ) ( -0.3727 )
A = ( -0.32 0.81 0.37 ), B = ( 0.4319 )
( -0.8 -0.92 -0.29 ) ( -1.4247 )
とする.
Sub Ex_Bicg1()
Const N = 3, Nnz = N * N
Dim A(Nnz - 1) As Double, Ia(N) As Long, Ja(Nnz - 1) As Long
Dim B(N - 1) As Double, X(N - 1) As Double
Dim Iter As Long, Res As Double, Info As Long
A(0) = 0.2: A(1) = -0.11: A(2) = -0.93: A(3) = -0.32: A(4) = 0.81: A(5) = 0.37: A(6) = -0.8: A(7) = -0.92: A(8) = -0.29
Ia(0) = 0: Ia(1) = 3: Ia(2) = 6: Ia(3) = 9
Ja(0) = 0: Ja(1) = 1: Ja(2) = 2: Ja(3) = 0: Ja(4) = 1: Ja(5) = 2: Ja(6) = 0: Ja(7) = 1: Ja(8) = 2
B(0) = -0.3727: B(1) = 0.4319: B(2) = -1.4247
Call Bicg1(N, A(), Ia(), Ja(), B(), X(), Info, Iter, Res)
Debug.Print "X =", X(0), X(1), X(2)
Debug.Print "Iter = " + CStr(Iter) + ", Res = " + CStr(Res) + ", Info = " + CStr(Info)
End Sub
Sub Bicg1(N As Long, Val() As Double, Rowptr() As Long, Colind() As Long, B() As Double, X() As Double, Optional Info As Long, Optional Iter As Long, Optional Res As Double, Optional MaxIter As Long=500, Optional Tol As Double=1.0E-10)
双共役勾配(BICG)法による連立一次方程式 Ax = b の解 (シンプルドライバ)
実行結果
X = 0.86 0.640000000000001 0.509999999999996
Iter = 3, Res = 1.86243126342707E-15, Info = 0