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

◆ z_sor_r()

void z_sor_r ( int  n,
const doublecomplex  b[],
doublecomplex  x[],
int  maxiter,
int *  iter,
double *  res,
int  lwork,
doublecomplex  work[],
int *  info,
doublecomplex  xx[],
doublecomplex  yy[],
int *  irev 
)

逐次的過剰緩和(SOR)法による連立一次方程式 Ax = b の解 (複素行列) (リバースコミュニケーション版)

目的
反復法(逐次的過剰緩和(SOR)法)により連立一次方程式 Ax = b の解を求める.
引数
[in]n行列の次数. (n >= 0) (n = 0 の場合, 処理を行わずに戻る)
[in]b[]配列 b[lb] (lb >= n)
右辺ベクトル b.
[in,out]x[]配列 x[lx] (lx >= n)
[in] 解の初期推定値.
[out] 求められた近似解.
[in]maxiter最大反復回数. (maxiter > 0)
[out]iter最終的な反復回数.
[out]res最終的な残差ノルム norm(b - A*x) の値.
[in]lwork配列 work[]のサイズ. (lwork >= n)
[out]work[]配列 work[lwork]
作業領域.
[out]info= 0: 正常終了.
< 0: (-info)番目の入力パラメータの誤り.
= 11: 最大反復回数を超えた.
[out]xx[]matvec および matsol 演算のための配列 xx[].
[in]yy[]matvec および matsol 演算のための配列 yy[].
[in,out]irevリバースコミュニケーションの制御変数.
[in] 最初の呼び出し時に irev = 0 に設定しておくこと. それ以降の呼び出し時にはirevの値を変更してはならない(収束時を除く).
[out] 0 以外のときには下記処理を行ってから再び本ルーチンを呼び出すこと.
= 0: 処理終了. 正常終了かどうかはinfoをチェックすること.
= 1: matvec 演算. A*xx を yy[] に設定すること. 他の変数を変更してはならない.
= 61: matsol 演算. (D/ω + L)^(-1)*xx を求め yy に設定すること. 他の変数を変更してはならない. ただし, ωは SOR 法の緩和パラメータ (0 < ω < 2), L は A の下三角部分, D は A の対角部分を表す.
= 91: 収束判定を行うために反復ごとに戻る. 収束時には irev = 99 として, それ以外のときは irev を変更せずに再度呼び出すこと. x[], iter および res にはその反復時の最新の値が入っているので収束判定のために使用するとよい. また, 中間結果出力のために使ってもよい.