|
|
◆ dptsvx()
| void dptsvx |
( |
char |
fact, |
|
|
int |
n, |
|
|
int |
nrhs, |
|
|
double |
d[], |
|
|
double |
e[], |
|
|
double |
df[], |
|
|
double |
ef[], |
|
|
int |
ldb, |
|
|
double |
b[], |
|
|
int |
ldx, |
|
|
double |
x[], |
|
|
double * |
rcond, |
|
|
double |
ferr[], |
|
|
double |
berr[], |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
(エキスパートドライバ) 連立一次方程式 AX = B の解 (正定値対称3重対角行列)
- 目的
- 本ルーチンは分解 A = L*D*L^T を用いて次の連立一次方程式を解く. ここで, Aはn×n正定値対称3重対角行列, また, XおよびBはn×nrhs行列である.
解の誤差限界および条件数の推定値も求められる.
- 解説
- 以下の手順で計算が行われる.
- fact = 'N'であれば, 行列Aは A = L*D*L^T と分解される. ここで, Lは対角要素が1の下2重対角行列, また, Dは対角行列である. 分解はまた A = U^T*D*U とみなすこともできる.
- 係数行列のi×i首座小行列が正定値でない場合, info =i を返す. そうでない場合, 分解されたAを用いて行列Aの条件数を推定する. 条件数の逆数がマシンイプシロンより小さければ警告としてinfo = n+1を返すが, 引き続き下記のように解Xを求め誤差限界を計算する.
- Aの分解形を用いて連立方程式を解きXを求める.
- 計算された解行列に反復改良を適用して精度向上を図り, その誤差限界および後退誤差推定値を計算する.
- 引数
-
| [in] | fact | Aの分解形を入力するかどうかを指定.
= 'F': df[]およびef[]にAの分解形を与える. df[]およびef[]は変更されない.
= 'N': 行列Aをdf[]およびef[]にコピーしてから分解する. |
| [in] | n | 行列Aの行および列数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る) |
| [in] | nrhs | 右辺の数, すなわち, 行列Bの列数. (nrhs >= 0) (nrhs = 0 の場合, 処理を行わずに戻る) |
| [in] | d[] | 配列 d[ld] (ld >= n)
正定値対称3重対角行列Aのn個の対角要素. |
| [in] | e[] | 配列 e[le] (le >= n - 1)
正定値対称3重対角行列Aのn-1個の副対角要素. |
| [in,out] | df[] | 配列 df[ldf] (ldf >= n)
[in] fact = 'F'の場合, 分解 A = L*D*L^T の対角行列Dのn個の対角要素を入力する.
[out] fact = 'N'の場合, 分解 A = L*D*L^T の対角行列Dのn個の対角要素を返す. |
| [in,out] | ef[] | 配列 ef[lef] (lef >= n - 1)
[in] fact = 'F'の場合, 分解 A = L*D*L^T の下2重対角行列Lのn-1個の副対角要素を入力する(Lの対角要素は1).
[out] fact = 'N'の場合, 分解 A = L*D*L^T の下2重対角行列Lのn-1個の副対角要素を返す(Lの対角要素は1). |
| [in] | ldb | 二次元配列b[][]の整合寸法. (ldb >= max(1, n)) |
| [in] | b[][] | 配列 b[lb][ldb] (lb >= nrhs)
n×nrhs 右辺行列 B. |
| [in] | ldx | 二次元配列x[][]の整合寸法. (ldx >= max(1, n)) |
| [out] | x[][] | 配列 x[lx][ldx] (lx >= nrhs)
info = 0 または info = n+1 の場合, n×nrhs 解行列 X. |
| [out] | rcond | 行列Aの条件数の逆数. rcondがマシンイプシロンより小さければ(特に rcond = 0であれば), 実用精度において行列は特異である. これは info > 0 を返すことにより通知される. |
| [out] | ferr[] | 配列 ferr[lferr] (lferr >= nrhs)
各解ベクトルX(j)(解行列Xの第j列)の前進誤差限界. X(j)に対応する真の解をXtrueとするとき, ferr[j-1]は, (X(j) - Xtrue)の要素の最大絶対値をX(j)の要素の最大絶対値で割った値の上限値である. |
| [out] | berr[] | 配列 berr[lberr] (lberr >= nrhs)
各解ベクトルX(j)の要素に関する後退相対誤差. (すなわち, X(j)を真の解にするためのAまたはBの任意の要素の相対変化の最小値) |
| [out] | work[] | 配列 work[lwork] (lwork >= 2*n)
作業領域. |
| [out] | info | = 0: 正常終了
= -1: 入力パラメータ fact の誤り (fact != 'F'および'N')
= -2: 入力パラメータ n の誤り (n < 0)
= -3: 入力パラメータ nrhs の誤り (nrhs < 0)
= -8: 入力パラメータ ldb の誤り (ldb < max(1, n))
= -10: 入力パラメータ ldx の誤り (ldx < max(1, n))
= i (0 < i <= n): Aのi×i首座小行列が正定値でないため分解を完了できなかった. 解は計算されなかった. rcond = 0 を返す.
= n+1: Uは非特異であるが, rcondがマシンイプシロンより小さく, これは実用精度において行列が特異であることを意味する. しかしながら, rcondの値が示すよりも計算値の精度が良いことがよくあるため, 解と誤差限界は計算される. |
- 出典
- LAPACK
|