XLPack 7.0
XLPack 数値計算ライブラリ (C API) リファレンスマニュアル
読み取り中…
検索中…
一致する文字列を見つけられません

◆ 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 * X = B
ここで, Aはn×n正定値対称3重対角行列, また, XおよびBはn×nrhs行列である.
解の誤差限界および条件数の推定値も求められる.
解説
以下の手順で計算が行われる.

  1. fact = 'N'であれば, 行列Aは A = L*D*L^T と分解される. ここで, Lは対角要素が1の下2重対角行列, また, Dは対角行列である. 分解はまた A = U^T*D*U とみなすこともできる.
  2. 係数行列のi×i首座小行列が正定値でない場合, info =i を返す. そうでない場合, 分解されたAを用いて行列Aの条件数を推定する. 条件数の逆数がマシンイプシロンより小さければ警告としてinfo = n+1を返すが, 引き続き下記のように解Xを求め誤差限界を計算する.
  3. Aの分解形を用いて連立方程式を解きXを求める.
  4. 計算された解行列に反復改良を適用して精度向上を図り, その誤差限界および後退誤差推定値を計算する.
引数
[in]factAの分解形を入力するかどうかを指定.
= '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