|
|
◆ cg1()
| void cg1 |
( |
char |
uplo, |
|
|
int |
n, |
|
|
const double |
val[], |
|
|
const int |
rowptr[], |
|
|
const int |
colind[], |
|
|
const double |
b[], |
|
|
double |
x[], |
|
|
double |
tol, |
|
|
int |
maxiter, |
|
|
int * |
iter, |
|
|
double * |
res, |
|
|
int |
lwork, |
|
|
double |
work[], |
|
|
int * |
info |
|
) |
| |
共役勾配(CG)法による連立一次方程式 Ax = b の解 (正定値対称行列) (シンプルドライバ)
- 目的
- 共役勾配(CG)法により正定値対称な係数行列の連立一次方程式 Ax = b の解を求める. 行列 A は CSR 形式で表される.
- 引数
-
| [in] | uplo | 対称行列 A の上または下三角部分のどちらを格納するか指定する.
= 'U': 上三角部分を格納.
= 'L': 下三角部分を格納.
= 'F': 全体(上および下三角部分両方)を格納. |
| [in] | n | 行列の次数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る) |
| [in] | val[] | 配列 val[lval] (lval >= nnz)
行列 A の非ゼロ要素の値. (nnz は非ゼロ要素数) |
| [in] | rowptr[] | 配列 rowptr[lrowptr] (lrowptr >= n + 1)
行列 A の行ポインタ. |
| [in] | colind[] | 配列 colind[lcolind] (lcolind >= nnz)
行列 A の列インデクス. (nnz は非ゼロ要素数) |
| [in] | b[] | 配列 b[lb] (lb >= n)
右辺ベクトル b. |
| [in,out] | x[] | 配列 x[lx] (lx >= n)
[in] 解の初期推定値.
[out] 求められた近似解. |
| [in] | tol | 収束判定基準値.
norm(b - A*x) <= tol*norm(b) であれば収束とみなす.
Tol < eps (マシン精度) であれば Tol = eps とみなす. |
| [in] | maxiter | 最大反復回数. (maxiter > 0) |
| [out] | iter | 最終的な反復回数. |
| [out] | res | 最終的な残差ノルム norm(b - A*x). |
| [in] | lwork | 配列 work[]のサイズ. (lwork >= 5*n) |
| [out] | work[] | 配列 work[lwork]
作業領域. |
| [out] | info | = 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 1: (警告) 行列 A が正定値でない(計算は続行する).
= 2: (警告) 前処理行列 M が正定値でない(計算は続行する).
= 11: 最大反復回数を超えた.
= 12: 行列 A が特異である. |
|