数学において、一般化最小残差法 (GMRES)は、不定非対称線形方程式の数値解を求める反復法です。この方法では、解を最小残差を持つクリロフ部分空間のベクトルで近似します。このベクトルを見つけるには、アーノルディ反復法が使用されます。
GMRES法は、 1986年にYousef SaadとMartin H. Schultzによって開発されました。 [1]これは、1975年にPaigeとSaundersによって開発されたMINRES法を一般化および改良したものです。 [2] [3] MINRES法では、行列が対称である必要がありますが、3つのベクトルのみを処理する必要があるという利点があります。GMRESは、 1980年にPeter Pulayによって開発されたDIIS法の特殊なケースです。DIISは非線形システムに適用できます。
方法
任意のベクトルvのユークリッドノルムを で表します。解くべき(正方)線形方程式系を で表します。 行列 Aは、サイズがm行m列の逆行列であると仮定します。さらに、 b は正規化されている、つまり であると仮定します。
この問題の n 番目のクリロフ部分空間は、初期推定値が与えられた場合の初期誤差です 。明らかに、 の場合、
GMRES は、残差のユークリッドノルムを最小化するベクトルによっての正確な解を近似します。
ベクトルは線形従属に近い可能性があるため、この基底の代わりに、アーノルディ反復法を使用して、の基底を形成する正規直交ベクトルを見つけます。特に、 です。
したがって、ベクトルはと書くことができます。ここで、 はによって形成されるm行n列の行列です。言い換えると、解のn番目の近似値 (つまり、 ) を見つけることは、ベクトル を見つけることに帰着します。ベクトルは、以下で説明するように、留数を最小化することで決定されます。
アーノルディ過程は、 の計算を簡略化するために使用される等式を満たす( ) 行上ヘッセンベルグ行列も構築します (「最小二乗問題を解く」を参照)。対称行列の場合、対称三重対角行列が実際に達成され、 MINRES法が結果として得られることに注意してください。
の列は正規直交なので、となります。ここで、 はの標準基底の最初のベクトル、 は最初の試行残差ベクトル (通常は) です。したがって、 は残差のユークリッドノルムを最小化することで見つけることができます。これは、サイズnの線形最小二乗問題 です。
これにより、GMRES メソッドが生成されます。- 回目の反復では、次のようになります。
- アーノルディ法で計算します。
- を最小化する を見つけます。
- 計算する;
- 残差がまだ十分に小さくない場合は繰り返します。
各反復で、行列ベクトル積を計算する必要があります。これは、サイズの一般的な密行列の場合、浮動小数点演算のコストが約かかりますが、疎行列の場合はコストが まで減少します。行列ベクトル積に加えて、n番目の反復で浮動小数点演算を計算する必要があります。
収束
n回目の反復では、クリロフ部分空間の残差が最小化されます。すべての部分空間は次の部分空間に含まれているため、残差は増加しません。m回の反復 ( mは行列Aのサイズ) の後、クリロフ空間K m はR m全体となり、GMRES 法は正確な解に到達します。ただし、少数の反復 ( mに対して) の後、ベクトルx n はすでに正確な解の近似値になっているという考え方です。
これは一般には起こりません。実際、Greenbaum、Pták、Strakoš の定理によれば、すべての非増加シーケンスa 1、...、a m −1、a m = 0 に対して、すべてのnに対して ‖ r n ‖ = a nとなるような行列Aが見つかります。ここで、 r nは上で定義した残差です。特に、残差がm − 1 回の反復で一定のままで、最後の反復でのみゼロになる 行列を見つけることは可能です。
しかし、実際には、GMRESは多くの場合うまく機能します。これは特定の状況で証明できます。Aの対称部分、つまりが正定値である場合、とがそれぞれ行列 の最小および最大の固有値を表します。[4]
Aが対称かつ正定値 である場合、 が成り立ちます。 ここで はユークリッドノルムにおける Aの条件数を表します。
Aが正定値でない 一般的なケースでは、次の式が得られます。 ここで、P n はp (0) = 1となる最大n次多項式の集合、 V はAのスペクトル分解に現れる行列、σ ( A ) はAのスペクトルです。大まかに言えば、これはAの固有値が原点から離れて密集しており、Aが正規性からそれほど離れていない場合に高速収束が発生することを示しています。[5]
これらの不等式はすべて、実際の誤差、つまり現在の反復x nと正確な解の間の距離ではなく、残差のみを制限します。
方法の拡張
他の反復法と同様に、GMRES は通常、収束を高速化するために 前処理法と組み合わせられます。
反復のコストは O( n 2 ) で増加します。ここで、nは反復回数です。したがって、この方法は、 x k を初期推定値として、たとえばk回の反復の後に再開されることがあります。結果として得られる方法は、GMRES( k ) または Restarted GMRES と呼ばれます。非正定値行列の場合、再開されたサブスペースは以前のサブスペースに近いことが多いため、この方法では収束が停滞する可能性があります。
GMRESとリスタートGMRESの欠点は、GCROTやGCRODRなどのGCRO型手法におけるクリロフ部分空間の再利用によって解決されます。[6] GMRESにおけるクリロフ部分空間の再利用は、線形システムのシーケンスを解く必要がある場合に収束を高速化することもできます。[7]
他のソルバーとの比較
対称行列の場合、アーノルディ反復法はランチョス反復法に簡約されます。対応するクリロフ部分空間法は、ペイジとサンダースの最小残差法 (MinRes) です。非対称の場合とは異なり、MinRes 法は 3 項の再帰関係によって与えられます。一般行列の場合、短い再帰関係によって与えられ、GMRES のように残差のノルムを最小化するクリロフ部分空間法は存在しないことが示されています。
別のクラスの方法は、非対称 Lanczos 反復法、特にBiCG 法に基づいています。これらは 3 項の再帰関係を使用しますが、最小残差は達成されないため、これらの方法では残差が単調に減少しません。収束も保証されません。
3 番目のクラスは、CGSやBiCGSTABなどの方法によって形成されます。これらも 3 項再帰関係 (したがって最適性なし) で動作し、収束を達成せずに途中で終了することもあります。これらの方法の背後にある考え方は、反復シーケンスの生成多項式を適切に選択することです。
これら 3 つのクラスはいずれもすべてのマトリックスに最適というわけではありません。1 つのクラスが他のクラスよりも優れている例が常に存在します。したがって、実際には複数のソルバーを試して、特定の問題に対してどれが最適かを確認します。
最小二乗問題を解く
GMRES 法の 1 つの部分は、を最小化する ベクトルを見つけることです。は( n + 1) 行n列の行列である ことに注意してください。したがって、 n 個の未知数に対してn +1 個の方程式の過剰制約線形システムが生成されます。
最小値はQR 分解を使用して計算できます。つまり、 ( n + 1) 行 ( n + 1)列の直交行列Ω nと、( n + 1) 行n列の上三角行列を 求めます。三角行列は列数より行が 1 つ多いため、一番下の行はゼロになります。したがって、次 の ように分解できます。ここでは、 n行n 列(つまり正方行列) の三角行列です。
QR 分解は、ヘッセンベルク行列の差が 0 の行と 1 列のみであるため、反復ごとに簡単に更新できます。 ここで、h n+1 = ( h 1, n +1 , ..., h n +1, n +1 ) Tです。これは、ヘッセンベルク行列に Ω n を事前に乗算し、0 と乗法単位行列の行を追加すると、ほぼ三角行列になることを意味します。σ がゼロの場合、これは三角行列になります。これを解決するには、ギブンズ回転が必要です 。 このギブンズ回転により、次の式が形成されます。 実際、 は の三角行列です。
QR分解が与えられれば、最小化問題は次のように簡単に解けます。 ベクトルをg n ∈ R nおよびγ n ∈ Rで 表す と、 次のようになります。この式を最小化する ベクトルyは次のように与えられます 。ここでも 、ベクトルは簡単に更新できます。[8]
サンプルコード
通常の GMRES (MATLAB / GNU Octave)
関数[x, e] = gmres ( A, b, x, max_iterations, しきい値) n = length ( A ); m = max_iterations ;
% x を初期ベクトルとして使用します
r = b - A * x ;
b_norm = norm ( b ); error = norm ( r ) / b_norm ;
% 1D ベクトルを初期化します
sn = zeros ( m , 1 ); cs = zeros ( m , 1 ); %e1 = zeros(n, 1); e1 = zeros ( m + 1 , 1 ); e1 ( 1 ) = 1 ; e = [ error ]; r_norm = norm ( r ); Q (:, 1 ) = r / r_norm ; % 注: これは上記のセクション「方法」のベータ スカラーではなく、% ベータ スカラーに e1 を掛けたものですbeta = r_norm * e1 ; k = 1の場合: m
% arnoldi を実行します
[ H ( 1 : k + 1 , k ), Q (:, k + 1 )] = arnoldi ( A , Q , k ); % H 行目の最後の要素を削除し、回転行列を更新します[ H ( 1 : k + 1 , k ), cs ( k ), sn ( k )] = apply_givens_rotation ( H ( 1 : k + 1 , k ), cs , sn , k ); % 残差ベクトルを更新しますbeta ( k + 1 ) = - sn ( k ) * beta ( k ); beta ( k ) = cs ( k ) * beta ( k ); error = abs ( beta ( k + 1 )) / b_norm ;
% エラーを保存します
e = [ e ; error ];
if ( error <= threshold ) break ; end end % しきい値に達していない場合、この時点で k = m になります (m+1 ではありません) % 結果を計算しますy = H ( 1 : k , 1 : k ) \ beta ( 1 : k ); x = x + Q (:, 1 : k ) * y ; end
%----------------------------------------------------%
% アーノルディ関数 %
%----------------------------------------------------%
function [h, q] = arnoldi ( A, Q, k ) q = A * Q (:, k ); % クリロフベクトルfor i = 1 : k % ヘッセンベルグ行列を維持した修正グラムシュミットh ( i ) = q ' * Q (:, i ); q = q - h ( i ) * Q (:, i ); end h ( k + 1 ) = norm ( q ); q = q / h ( k + 1 ); end
%----------------------------------------------------------------------%
% H 列にギブンズ回転を適用 %
%---------------------------------------------------------------------%
function [h, cs_k, sn_k] = apply_givens_rotation ( h, cs, sn, k ) % i 番目の列に適用for i = 1 : k - 1 temp = cs ( i ) * h ( i ) + sn ( i ) * h ( i + 1 ); h ( i + 1 ) = - sn ( i ) * h ( i ) + cs ( i ) * h ( i + 1 ); h ( i ) = temp ; end
% 回転の次の sin cos 値を更新します。
[ cs_k , sn_k ] = givens_rotation ( h ( k ), h ( k + 1 ) )。
% H(i + 1, i) を削除
h ( k ) = cs_k * h ( k ) + sn_k * h ( k + 1 ); h ( k + 1 ) = 0.0 ;終了
%%----ギブンズ回転行列を計算します----%%
function [cs, sn] = givens_rotation ( v1, v2 ) % if (v1 == 0) % cs = 0; % sn = 1; % else t = sqrt ( v1 ^ 2 + v2 ^ 2 ); % cs = abs(v1) / t; % sn = cs * v2 / v1; cs = v1 / t ; % http://www.netlib.org/eispack/comqr.f を参照してくださいsn = v2 / t ; % end end
参照
参考文献
- ^ Saad, Youcef; Schultz, Martin H. (1986). 「GMRES: 非対称線形システムを解くための一般化最小残差アルゴリズム」SIAM Journal on Scientific and Statistical Computing . 7 (3): 856– 869. doi :10.1137/0907058. ISSN 0196-5204.
- ^ ペイジとサンダース、「スパース不定値線形方程式の解」、SIAM J. Numer. Anal.、vol 12、617 ページ (1975) https://doi.org/10.1137/0712047
- ^ ニファ、ナウファル (2017). Solveurs Performants pour l'optimisation sous contraintes enification de paramètres [パラメータ同定問題における制約付き最適化のための効率的なソルバー] (論文) (フランス語)。
- ^ Eisenstat、Elman & Schultz 1983、Thm 3.3。注:GCR のすべての結果は GMRES にも当てはまります。Saad & Schultz 1986 を参照。
- ^ Trefethen, Lloyd N.; Bau, David, III. (1997).数値線形代数. フィラデルフィア: 産業応用数学協会. 定理 35.2. ISBN 978-0-89871-361-9。
{{cite book}}: CS1 maint: multiple names: authors list (link) - ^ Amritkar, Amit; de Sturler, Eric; Świrydowicz, Katarzyna; Tafti, Danesh; Ahuja, Kapil (2015). 「CFD アプリケーションのための Krylov サブスペースのリサイクルと新しいハイブリッドリサイクルソルバー」。Journal of Computational Physics . 303 : 222. arXiv : 1501.03358 . Bibcode :2015JCoPh.303..222A. doi :10.1016/j.jcp.2015.09.040. S2CID 2933274.
- ^ Gaul, André (2014).線形システムのシーケンスに対する Krylov 部分空間法のリサイクル(Ph.D.). TU Berlin. doi :10.14279/depositonce-4147.
- ^ Stoer, Josef; Bulirsch, Roland (2002).数値解析入門. 応用数学テキスト(第3版). ニューヨーク:Springer. §8.7.2. ISBN 978-0-387-95452-3。
- マイスター、アンドレアス。ヴェメル、クリストフ (2005)。Numeric リニア Gleichungssysteme。ヴィースバーデン: Vieweg。ISBN 978-3-528-13135-7。
- Saad, Y. (2003).疎線形システムの反復法(第 2 版). フィラデルフィア: SIAM. ISBN 978-0-89871-534-7。
- アイゼンスタット、スタンレー C.; エルマン、ハワード C.; シュルツ、マーティン H. (1983)。「非対称線形方程式系の変分反復法」。SIAM 数値解析ジャーナル。20 (2): 345– 357。doi :10.1137/0720023。ISSN 0036-1429 。
- Dongarra 他著「線形システムの解法テンプレート: 反復法の構成要素」第 2 版、SIAM、フィラデルフィア、1994 年
- Imankulov, Timur; Lebedev, Danil; Matkerim, Bazargul; Daribayev, Beimbet; Kassymbek, Nurislam (2021-10-08). 「多孔質媒体における多相多成分流の数値シミュレーション: ニュートン法の効率分析」. Fluids . 6 (10): 355. doi : 10.3390/fluids6100355 . ISSN 2311-5521.
