|
|
◆ Zptsv()
| Sub Zptsv |
( |
N As |
Long, |
|
|
D() As |
Double, |
|
|
E() As |
Complex, |
|
|
B() As |
Complex, |
|
|
Info As |
Long, |
|
|
Optional Nrhs As |
Long = 1 |
|
) |
| |
(シンプルドライバ) 連立一次方程式 AX = B の解 (正定値エルミート3重対角行列)
- 目的
- 本ルーチンは次の複素連立一次方程式を解く. ここで, AはN×N正定値エルミート3重対角行列, また, XおよびBはN×Nrhs行列である.
Aを A = L*D*L^H と分解し, 次に分解されたAを用いて連立一次方程式の解を求める.
- 引数
-
| [in] | N | 行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る) |
| [in,out] | D() | 配列 D(LD - 1) (LD >= N)
[in] 正定値エルミート3重対角行列AのN個の対角要素.
[out] 分解 A = L*D*L^T の対角行列DのN個の対角要素. |
| [in,out] | E() | 配列 E(LE - 1) (LE >= N - 1)
[in] 正定値エルミート3重対角行列AのN-1個の副対角要素.
[out] 分解 A = L*D*L^T の下2重対角行列LのN-1個の下副対角要素. これは, 分解 A = U^T*D*U の上2重対角行列Uの上副対角要素とみなすこともできる(LおよびUの対角要素は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: パラメータ D() の誤り.
= -3: パラメータ E() の誤り.
= -4: パラメータ B() の誤り.
= -6: パラメータ Nrhs の誤り. (Nrhs < 0)
= i > 0: i×i首座小行列が正定値でないため分解を完了できなかった. 解は計算されなかった. i = N でない限り分解は完了していない. |
| [in] | Nrhs | (省略可)
右辺の数, すなわち, 行列Bの列数. (Nrhs >= 0) (Nrhs = 0 の場合, 処理を行わずに戻る) (省略時 = 1) |
- 出典
- LAPACK
- 使用例
- 連立一次方程式 Ax = B を解き, 同時にAの条件数の逆数の推定値(RCond)を求める. ただし,
( 2.88 0.29-0.44i 0 )
A = ( 0.29+0.44i 0.62 -0.01-0.02i )
( 0 -0.01+0.02i 0.46 )
( 1.6236-0.7300i )
B = ( 0.1581+0.1537i )
( 0.1132-0.2290i )
とする. Sub Ex_Zptsv()
Const N As Long = 3
Dim D(N - 1) As Double, E(N - 2) As Complex, B(N - 1) As Complex
Dim ANorm As Double, RCond As Double, Info As Long
D(0) = 2.88: D(1) = 0.62: D(2) = 0.46
E(0) = Cmplx(0.29, 0.44): E(1) = Cmplx(-0.01, 0.02)
B(0) = Cmplx(1.6236, -0.73): B(1) = Cmplx(0.1581, 0.1537): B(2) = Cmplx(0.1132, -0.229)
ANorm = Zlanht("1", N, D(), E())
Call Zptsv(N, D(), E(), B(), Info)
If Info = 0 Then Call Zptcon(N, D(), E(), ANorm, RCond, Info)
Debug.Print "X =",
Debug.Print "RCond =", RCond
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 複素数の実数部
Function Zlanht(Norm As String, N As Long, D() As Double, E() As Complex, Optional Info As Long) As Double 行列の1ノルム, フロベニウスノルム, 無限ノルム, または, 要素の最大絶対値 (エルミート3重対角行列)
Sub Zptcon(N As Long, D() As Double, E() As Complex, ANorm As Double, RCond As Double, Info As Long) 行列の条件数 (正定値エルミート3重対角行列)
Sub Zptsv(N As Long, D() As Double, E() As Complex, B() As Complex, Info As Long, Optional Nrhs As Long=1) (シンプルドライバ) 連立一次方程式 AX = B の解 (正定値エルミート3重対角行列)
- 実行結果
X = 0.59 -0.28 -0.2 -0.04 0.24 -0.49
RCond = 0.124521368143895
Info = 0
|