|
|
◆ Dptsv()
| Sub Dptsv |
( |
N As |
Long, |
|
|
D() As |
Double, |
|
|
E() As |
Double, |
|
|
B() As |
Double, |
|
|
Info As |
Long, |
|
|
Optional Nrhs As |
Long = 1 |
|
) |
| |
(シンプルドライバ) 連立一次方程式 AX = B の解 (正定値対称3重対角行列)
- 目的
- 本ルーチンは次の連立一次方程式を解く. ここで, Aはn×n正定値対称3重対角行列, また, XおよびBはn×nrhs行列である.
Aを A = L*D*L^T と分解し, 次に分解された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)を求める. ただし, Aは正定値対称3重対角行列で
( 2.58 -0.99 0 ) ( -1.1850 )
A = ( -0.99 0.69 -0.03 ), B = ( 0.1410 )
( 0 -0.03 0.18 ) ( 0.1614 )
とする. Sub Ex_Dptsv()
Const N As Long = 3
Dim D(N - 1) As Double, E(N - 2) As Double, B(N - 1) As Double
Dim ANorm As Double, RCond As Double, Info As Long
D(0) = 2.58: D(1) = 0.69: D(2) = 0.18
E(0) = -0.99: E(1) = -0.03
B(0) = -1.185: B(1) = 0.141: B(2) = 0.1614
ANorm = Dlanst("1", N, D(), E())
Call Dptsv(N, D(), E(), B(), Info)
If Info = 0 Then Call Dptcon(N, D(), E(), ANorm, RCond, Info)
Debug.Print "X =", B(0), B(1), B(2)
Debug.Print "RCond =", RCond
Debug.Print "Info =", Info
End Sub
Function Dlanst(Norm As String, N As Long, D() As Double, E() As Double, Optional Info As Long) As Double 行列の1ノルム, フロベニウスノルム, 無限ノルム, または, 要素の最大絶対値 (対称3重対角行列)
Sub Dptcon(N As Long, D() As Double, E() As Double, ANorm As Double, RCond As Double, Info As Long) 行列の条件数 (正定値対称3重対角行列)
Sub Dptsv(N As Long, D() As Double, E() As Double, B() As Double, Info As Long, Optional Nrhs As Long=1) (シンプルドライバ) 連立一次方程式 AX = B の解 (正定値対称3重対角行列)
- 実行結果
X = -0.82 -0.94 0.74
RCond = 0.0437508336668
Info = 0
|