|TOP Page|
Bi-CGSTAB法はH.A. van der Vorstによって提案された[1}非対称行列用の反復法である。
BiCG法における回の反復における残差
とすると、BiCGSTAB法とはこのBiCG法の残差
に以下のような多項式
を用いることで残差
を減少させ、BiCG法を安定化した方法である。
但し、は次のような漸化式で表される多項式である。
つまり、回目の反復では残差
を最小化するようにを選ぶ。
BiCGSTAB法の手続きで難しいのは、いかにしてBiCG法で用いる残差ベクトルや解ベクトルなどを明示的に持たずにBiCG法に残差の最小化の機能を追加するのかということである。クリロフ部分空間法であるBiCG法では残差などのベクトルはの多項式と初期残差を使って表現できる。これを利用してBiCGSTAB法では初期残差からBiCG法における係数を計算する。
BiCG法における回反復における残差を
、解の更新ベクトルを
とする。次のように多項式
と
を用いて初期残差
でこれらを表すとする。つまり、
この多項式と
は次の漸化式を満たす。
多項式と
を用いると残差は次のように書ける。
ここで、が出てきたので、これがどのように更新されるのか詳しく調べる。
を更新するためには
が必要であることがわかる。そこで
についても、どのように更新されるのかを調べてみる。
このことから、と
があれば多項式を更新できるということがわかる。そこでBiCGSTAB法におけるベクトル
を次のように定義する。
これらを用いて上の漸化式をまとめると、
となる。
次はこのベクトル、
から、BiCG法の係数
、
を作る方法を考える。
まず始めにを導入する。
を次のように定めると、
BiCG法より、は
を使って
のように定義された。
しかし、を作る時に必要なBiCG法のベクトル
、
は用いることができない。そこで、次のような値
を考える。
このは次のように変形される。
ここで、BiCG法は残差が
と
で作られるクリロフ部分空間
が直交するという条件の中で解を探すものであった。
についての多項式
の中で次数がもっとも高い
次の項以外の項は
と内積を計算すると0になることがわかる。よってこの性質を利用すると
は
の最高次数の係数を
とすると次のように書くことができる。
同じように、についてもこの性質を利用して表示してみる。
但し、は多項式
の最高次数の係数である。上の2式を見比べると
は次のように作ることができることがわかる。
と
はそれぞれ
と
の最高次数の係数であったことを考えると、
と
は明らかに次の漸化式を満たす
よって、は次のようになる。
つぎにBiCG法の係数について調べる。BiCG法によると
は次のように定義された。
分子は前の議論によると、であり計算できる値である。そこで分母の
を取り出して詳しく調べる。
また、BiCG法のアルゴリズムからが成り立つ。
ここでもの導出の際と同様に、BiCG法は残差
とクリロフ部分空間
を直交させるという条件を用いる。
よって次が成り立つ。
以上からは次数が
であるため、最高次の項以外は
との内積を計算すると0になる。
の最高次の係数を
とおいていたので、これを用いると
同様の議論から次がいえる。
上の2式から次のようになる。
よってを求めることができる。
続いての導出する。これは、残差の2乗ノルムを最小化するように選ばれる。
回目の反復における残差の2乗ノルムは以下のように表された。
簡単のために以下のようにベクトルを定義する。
これを用いると、残差の2乗ノルムの2乗は次のようにかける
残差の2乗ノルムが最小であるという条件から
となる。よっては次のようになる。
残差は次のように更新された
つまり、残差の増分は以下のように表される。
また解の増分と残差の増分の関係から以下がいえる。
上の2式を比較すると解の更新の関係が得られる。
  1.   Compute , Choose
arbitrary;
  2.  
  3.   For Do:
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.    
  11.  End Do
以上がBICGSTAB法の基本的な手続きである。6,7,8行目が残差最小化のためのステップであり、4,5,9,10行目がBiCG法に相当するステップであると解釈できる。
次のプログラムは次のような移流拡散問題の例
から生じる行列をBiCGSTAB法で解くプログラムである。
DOWNLOAD | BiCGSTAB.zip |
---|
OS:WindowsXP 開発環境:VC++ 2005 言語:C++
結果を表示する場合は次のようにすればよい。
解くべき方程式を前処理行列
を使って次のように変形する。
これはが
の右から掛けられているので右前処理と呼ばれる。
係数行列がから
に変わっている。この
の性質が単位行列に近ければ元の方程式よりも早い収束が期待される。
この前処理を使ってBiCGSTAB法で解を求める方法は基本的にBiCGSTAB法での部分を
に変えて
を求めた後に最後に1回解く事で
を求めるということだが、少し変形すると
を明示的に持たずに直接
の増分を求めることが可能である。
、
とおくと、というように解の増分を求めることができる。
、
を用いることで
を明示的に持たなくてもよいことがわかる。また明らかに
、
である。残差については
であるからに対する残差はそのまま
に対する残差でもある。よって反復計算しながら
を求める際に得られる残差の大きさは
に対する残差の大きさでもある。右前処理は反復しながら解の残差の大きさがわかるので残差の大きさを判断して計算を打ち切るかどうか決める際に便利である。
  1.   Compute , Choose
arbitrary;
  2.  
  3.   For Do:
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.    
  11.    
  12.    
  11.  End Do
以上が右前処理つきBICGSTAB法の基本的な手続きである。
次のプログラムは次のような移流拡散問題の例
から生じる行列を「ILU分解による右前処理つきBiCGSTAB法」で解くプログラムである。
DOWNLOAD | ILU_BiCGSTAB.zip |
---|
OS:WindowsXP 開発環境:VC++ 2005 言語:C++
結果を表示する場合は次のようにすればよい。
[1]H.A. van der Vorst. Bi-CGSTAB: a fast and smoothly converging variant of Bi-CG for solution of non-symmetric linear systems. SIAM J. Sci. Stat. Comp., 13:631-644, 1992