|
|
◆ Zpttrf()
| Sub Zpttrf |
( |
N As |
Long, |
|
|
D() As |
Double, |
|
|
E() As |
Complex, |
|
|
Info As |
Long |
|
) |
| |
係数行列のLDLH分解 (正定値エルミート3重対角行列)
- 目的
- 本ルーチンは正定値エルミート3重対角行列AのL*D*L^H分解を計算する. この分解はまた A = U^H*D*U の形式とみなすこともできる.
- 引数
-
| [in] | N | 行列Aの行および列数. (N >= 0) (N = 0 の場合, 処理を行わずに戻る) |
| [in,out] | D() | 配列 D(LD - 1) (LD >= N)
[in] 正定値エルミート3重対角行列AのN個の対角要素.
[out] 分解 A = L*D*L^H の対角行列DのN個の対角要素. |
| [in,out] | E() | 配列 E(LE - 1) (LE >= N - 1)
[in] 正定値エルミート3重対角行列AのN-1個の副対角要素.
[out] 分解 A = L*D*L^H の下2重対角行列LのN-1個の下副対角要素. これは, 分解 A = U^H*D*U の上2重対角行列Uの上副対角要素とみなすこともできる(LおよびUの対角要素は1). |
| [out] | Info | = 0: 正常終了.
= -1: パラメータ N の誤り. (N < 0)
= -2: パラメータ D() の誤り.
= -3: パラメータ E() の誤り.
= i > 0: i×i首座小行列が正定値でない. i < N の場合, 分解を完了できなかった. i = N の場合, 分解は完了したが D(N-1) <= 0 である. |
- 出典
- 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_Zpttrf()
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 Zpttrf(N, D(), E(), Info)
If Info = 0 Then Call Zpttrs("L", 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 Zpttrf(N As Long, D() As Double, E() As Complex, Info As Long) 係数行列のLDLH分解 (正定値エルミート3重対角行列)
Sub Zpttrs(Uplo As String, 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
|