数値線形代数において、共役勾配安定化法( BiCGSTABと略されることが多い)は、非対称線形システムの数値解法としてHA van der Vorstが開発した反復法です。これは共役勾配法(BiCG)の派生であり、元の BiCG や共役勾配二乗法(CGS) などの派生法よりも収束が速く、スムーズです。これはクリロフ部分空間法です。元の BiCG 法とは異なり、システム行列の転置による乗算は必要ありません。
アルゴリズムの手順
前処理なしの BiCGSTAB
以下のセクションでは、( x , y ) = x T y はベクトルのドット積を表します。線形システムAx = bを解くために、BiCGSTAB は初期推定値x 0から開始し、次のように進行します。
- r 0 = b − Ax 0
- 任意のベクトルr̂0を( r̂0 , r0 )≠0となるように選ぶ。例えば、r̂0 = r0
- ρ 0 = ( r̂ 0 , r 0 )
- r 0 = 0である。
- i = 1, 2, 3, …の場合
- v = Ap i −1
- α = ρ i −1 /( r̂ 0 , v )
- h = x i −1 + α p i −1
- s = r i −1 − α v
- hが十分に正確であれば、つまりsが十分に小さければ、x i = hに設定して終了する。
- t =として
- ω = ( t , s )/( t , t )
- x i = h + ω s
- r i = s − ω t
- x i が十分に正確であれば、つまりr iが十分に小さければ終了する
- ρ i = ( r̂ 0 , r i )
- β = ( ρ i / ρ i −1 )( α / ω )
- p i = r i + β ( p i −1 − ω v )
場合によっては、ベクトルr̂0をランダムに選択すると数値安定性が向上する。[1]
事前調整された BiCGSTAB
前処理は通常、反復法の収束を加速するために使用されます。前処理K = K 1 K 2 ≈ Aを使用して線形システムAx = b を解くには、前処理された BiCGSTAB は初期推定値x 0から開始し、次のように進行します。
- r 0 = b − Ax 0
- 任意のベクトルr̂0を( r̂0 , r0 )≠0となるように選ぶ。例えば、r̂0 = r0
- ρ 0 = ( r̂ 0 , r 0 )
- r 0 = 0である。
- i = 1, 2, 3, …の場合
- y = K −1
2 け −1
1 π i −1 ... - v =ああ
- α = ρ i −1 /( r̂ 0 , v )
- h = x i −1 + α y
- s = r i −1 − α v
- hが十分に正確であれば、x i = hとなり終了する。
- Θ = K −1
2 け −1
1 s - t =アズ
- ω = ( K −1
1 t、 K −1
1 s )/( K −1
1 t、 K −1
1 t ) - x i = h + ω z
- r i = s − ω t
- x i が十分に正確であれば終了する
- ρ i = ( r̂ 0 , r i )
- β = ( ρ i / ρ i −1 )( α / ω )
- p i = r i + β ( p i −1 − ω v )
- y = K −1
この定式化は、明示的に前処理されたシステムに前処理なしのBiCGSTABを適用することと同等である。
- x̃ = b̃
ここでÃ = K −1
1 A K −1
2 , x̃ = K 2 xかつb̃ = K −1
1 b . 言い換えれば、この定式化では左前処理と右前処理の両方が可能です。
導出
多項式形式の BiCG
BiCGでは、探索方向p iとp̂ iおよび残差r iとr̂ i は次の再帰関係を使用して更新されます。
- p i = r i −1 + β i p i −1、
- p̂ i = r̂ i −1 + β i p̂ i −1、
- r i = r i −1 − α i Ap i、
- r̂ i = r̂ i −1 − α i A T p̂ i です。
定数α iとβ i は次のように選ばれる。
- α i = ρ i / ( p̂ i , Api )、
- β i = ρ i / ρ i −1
ここでρ i = ( r̂ i −1 , r i −1 )であり、残差と探索方向はそれぞれ双直交性と双共役性を満たす。すなわち、i ≠ jに対して、
- ( r̂ i , r j ) = 0、
- ( p̂ i , Ap j ) = 0 です。
それは簡単に証明できる。
- r i = P i ( A ) r 0、
- r̂ i = P i ( A T ) r̂ 0、
- p i +1 = T i ( A ) r 0、
- p̂ i +1 = T i ( A T ) r̂ 0
ここで、P i ( A )とT i ( A )はAのi次多項式です。これらの多項式は次の再帰関係を満たします。
- P i ( A ) = P i −1 ( A ) − α i A T i −1 ( A )、
- T i ( A ) = P i ( A ) + β i +1 T i −1 ( A )です。
BiCGからのBiCGSTABの導出
BiCGの残差と探索方向を明示的に追跡する必要はありません。言い換えれば、BiCGの反復は暗黙的に実行できます。BiCGSTABでは、
- r̃ i = Q i ( A ) P i ( A ) r 0
ここで、Q i ( A ) = ( I − ω 1 A )( I − ω 2 A )⋯( I − ω i A )であり、適切な定数ω jをr i = P i ( A ) r 0の代わりに使用することで、Q i ( A )によりr̃ iでの収束がr iよりも速く滑らかになることを期待しています。
P i ( A )とT i ( A )の再帰関係とQ i ( A )の定義から次のことが分かります。
- Q i ( A ) P i ( A ) r 0 = ( I − ω i A )( Q i −1 ( A ) P i −1 ( A ) r 0 − α i A Q i −1 ( A ) T i −1 ( A ) r 0 )、
これはQ i ( A ) T i ( A ) r 0の再帰関係の必要性を伴います。これはBiCG関係からも導くことができます。
- Q i ( A ) T i ( A ) r 0 = Q i ( A ) P i ( A ) r 0 + β i +1 ( I − ω i A ) Q i −1 ( A ) P i −1 ( A ) r 0。
r̃ i の定義と同様に、BiCGSTABは次のように定義します。
- p̃ i +1 = Q i ( A ) T i ( A ) r 0 です。
ベクトル形式で書くと、 p̃ iとr̃ iの再帰関係は
- p̃ i = r̃ i −1 + β i ( I − ω i −1 A ) p̃ i −1、
- r̃ i = ( I − ω i A )( r̃ i −1 − α i A p̃ i )です。
x iの再帰関係を導くには、次のように定義する。
- s i = r̃ i −1 − α i A p̃ i です。
r̃ iの再帰関係は次のように表される。
- r̃ i = r̃ i −1 − α i A p̃ i − ω iとして、
これは
- x i = x i −1 + α i p̃ i + ω i s i です。
BiCGSTAB定数の決定
ここで、 BiCG定数αiとβiを決定し、 適切なωiを選択します。
BiCGでは、β i = ρ i / ρ i −1であり、
- ρ i = ( r̂ i −1 , r i −1 ) = ( P i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 )です。
BiCGSTABはr̂ iやr iを明示的に記録しないので、ρ iはこの式からすぐには計算できない。しかし、スカラーと関連づけることができる。
- ρ̃ i = ( Q i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 ) = ( r̂ 0 , Q i −1 ( A ) P i −1 ( A ) r 0 ) = ( r̂ 0 , r i −1 )です。
双直交性により、r i −1 = P i −1 ( A ) r 0はU i −2 ( A T ) r̂ 0に直交します。ここで、 U i −2 ( A T )はA Tのi − 2次多項式の任意のものです。したがって、ドット積( P i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 )と( Q i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 )では、 P i −1 ( A T )とQ i −1 ( A T )の最高次の項のみが重要になります。P i −1 ( A T )とQ i −1 ( A T )の主係数はそれぞれ(−1) i −1 α 1 α 2 ⋯ α i −1と(−1) i −1 ω 1 ω 2 ⋯ ω i −1である。したがって、
- ρ i = ( α 1 / ω 1 )( α 2 / ω 2 )⋯( α i −1 / ω i −1 ) ρ̃ i、
そしてこうして
- β i = ρ i / ρ i −1 = ( ρ̃ i / ρ̃ i −1 )( α i −1 / ω i −1 )。
α iの簡単な式も同様に導出できる。BiCGでは、
- α i = ρ i /( p̂ i , Ap i ) = ( P i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 )/( T i −1 ( A T ) r̂ 0 , A T i −1 ( A ) r 0 )です。
上の場合と同様に、双直交性と双共役性により、ドット積ではP i −1 ( A T )とT i −1 ( A T )の最高次の項のみが重要になります。 P i −1 ( A T )とT i −1 ( A T ) は同じ先頭係数を持ちます。したがって、式ではそれらを同時に Q i −1 ( A T )に置き換えることができ、 次の式が得られます。
- α i = ( Q i −1 ( A T ) r̂ 0 , P i −1 ( A ) r 0 )/( Q i −1 ( A T ) r̂ 0 , A T i −1 ( A ) r 0 ) = ρ̃ i /( r̂ 0 , A Q i −1 ( A ) T i −1 ( A ) r 0 ) = ρ̃ i /( r̂ 0 , Ap̃ i ) .
最後に、BiCGSTABはω iの関数として2ノルムでr̃ i = ( I − ω i A ) s i を最小化するω i を選択します。これは次の場合に達成されます。
- (( I − ω i A ) s i , As i ) = 0 ,
最適な値を与える
- ω i = ( As i、s i )/( As i、As i )。
一般化
BiCGSTAB は BiCG とGMRESの組み合わせと見なすことができます。各 BiCG ステップの後に GMRES( 1 ) (つまり、各ステップで GMRES が再開される) ステップが続き、CGS の不規則な収束動作を修復します。BiCGSTAB は、CGS の改良として開発されました。ただし、次数 1 の最小残差多項式を使用しているため、行列Aに大きな複素固有値がある場合、このような修復は効果的でない可能性があります。このような場合、数値実験で確認されているように、BiCGSTAB は停滞する可能性があります。
高次の最小残差多項式の方がこの状況にうまく対処できると期待できます。これにより、BiCGSTAB2 [1]やより一般的なBiCGSTAB( l ) [2]などのアルゴリズムが生まれました。BiCGSTAB( l )では、 l回のBiCGステップごとにGMRES( l ) ステップが続きます。BiCGSTAB2 は、 l = 2の場合のBiCGSTAB( l )と同等です。
参照
参考文献
- Van der Vorst, HA (1992). 「Bi-CGSTAB: 非対称線形システムの解法のための Bi-CG の高速かつスムーズに収束する変形」SIAM J. Sci. Stat. Comput. 13 (2): 631–644. doi :10.1137/0913035. hdl : 10338.dmlcz/104566 .
- Saad, Y. (2003). 「§7.4.2 BICGSTAB」 .スパース線形システムの反復法(第 2 版). SIAM. pp. 231–234. ISBN 978-0-89871-534-7。
- ^ Gutknecht, MH (1993). 「複素スペクトルを持つ行列に対する BICGSTAB のバリアント」SIAM J. Sci. Comput. 14 (5): 1020–1033. doi :10.1137/0914062.
- ^ Sleijpen, GLG; Fokkema, DR (1993 年 11 月). 「複素スペクトルを持つ非対称行列を含む線形方程式の BiCGstab(l)」(PDF) .数値解析に関する電子取引. 1.ケント、オハイオ州: ケント州立大学: 11–32. ISSN 1068-9613.
