|
|
◆ Zgtsv()
| Sub Zgtsv |
( |
N As |
Long, |
|
|
Dl() As |
Complex, |
|
|
D() As |
Complex, |
|
|
Du() As |
Complex, |
|
|
B() As |
Complex, |
|
|
Info As |
Long, |
|
|
Optional Nrhs As |
Long = 1 |
|
) |
| |
(シンプルドライバ) 連立一次方程式 AX = B の解 (複素3重対角行列)
- 目的
- 本ルーチンは次の連立一次方程式を解く. ここで, 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 を解き, 同時にAの条件数の逆数の推定値(RCond)を求める. ただし,
( 0.81+0.37i 0.20-0.11i 0 )
A = ( 0.64+0.51i -0.80-0.92i -0.93-0.32i )
( 0 0.71+0.59i -0.29+0.86i )
( -0.0484+0.2644i )
B = ( -0.2644-1.0228i )
( -0.5299+1.5025i )
とする. Sub Ex_Zgtsv()
Const N = 3
Dim Dl(N - 2) As Complex, D(N - 1) As Complex, Du(N - 2) As Complex
Dim B(N - 1) As Complex, Info As Long
Dl(0) = Cmplx(0.64, 0.51): Dl(1) = Cmplx(0.71, 0.59)
D(0) = Cmplx(0.81, 0.37): D(1) = Cmplx(-0.8, -0.92): D(2) = Cmplx(-0.29, 0.86)
Du(0) = Cmplx(0.2, -0.11): Du(1) = Cmplx(-0.93, -0.32)
B(0) = Cmplx(-0.0484, 0.2644): B(1) = Cmplx(-0.2644, -1.0228): B(2) = Cmplx(-0.5299, 1.5025)
Call Zgtsv(N, Dl(), D(), Du(), B(), Info)
Debug.Print "X =",
Debug.Print "Info =", Info
End Sub
Function Cmplx(R As Double, Optional I As Double=0) As Complex 複素数の作成
Function Cimag(A As Complex) As Double 複素数の虚数部
Function Creal(A As Complex) As Double 複素数の実数部
Sub Zgtsv(N As Long, Dl() As Complex, D() As Complex, Du() As Complex, B() As Complex, Info As Long, Optional Nrhs As Long=1) (シンプルドライバ) 連立一次方程式 AX = B の解 (複素3重対角行列)
- 実行結果
X = -0.15 0.19 0.2 0.94 0.79 -0.13
Info = 0
|