ヤコビ法

数値線形代数においてヤコビ法(別名ヤコビ反復法)は、厳密に対角優位な 線形方程式系の解を求める反復アルゴリズムです。各対角要素を解き、近似値を代入します。この処理は収束するまで反復されます。このアルゴリズムは、行列対角化におけるヤコビ変換法の簡略版です。この法は、カール・グスタフ・ヤコブ・ヤコビにちなんで名付けられました

説明

をn個の線形方程式の正方連立方程式とします

と が既知で が未知の場合、ヤコビ法を用いて を近似することができます。ベクトル は(多くの場合 )の初期推定値を表します。を のk回目の近似値または反復と表しを の次の(またはk +1 回目の)反復と表します

行列ベースの式

そして、Aは対角成分D、下三角部分L、上三角部分Uに分解できるそして、解は次のように反復的に得られる。

要素ベースの式

各行の要素に基づく式は次のようになります。の計算には、自身を除く各要素が必要です。ガウス・ザイデル法とは異なり、を で上書きすることはできません。その値は残りの計算で必要になるからです。必要な記憶領域の最小量は、サイズnのベクトル2つです。

アルゴリズム

入力: 解の初期推定値x (0)、(対角優勢)行列A、右辺ベクトルb、収束基準出力: 収束に達したときの解コメント:上記の要素ベースの式に基づく擬似コードk = 0収束に達していないi  := 1ステップnまで実行 σ = 0場合j  := 1ステップnまで実行j i場合σ = σ + a ij x j ( k ) end end x i ( k +1) = ( b iσ ) / a ii end k を増分end             

収束

標準的な収束条件(あらゆる反復法の場合)は、反復行列のスペクトル半径が1未満であるときです。

この方法が収束するための十分条件(ただし必要条件ではない)は、行列Aが厳密または既約に対角優位であることです。厳密な行対角優位とは、各行において対角項の絶対値が他の項の絶対値の合計よりも大きいことを意味します。

ヤコビ法は、これらの条件が満たされなくても収束することがあります。

ヤコビ法はすべての対称正定値行列に対して収束するわけではないことに注意する。例えば、

例題

初期推定値を持つ形式の線形システムは次のように与えられる。

を推定するために、上で述べた方程式 を使います。まず、より便利な形 に方程式を書き直します。ここで、 と です。既知の値からが求められます。さらに 、求められます 。 と を計算して、推定します次の反復では が得られます 。このプロセスは収束するまで(つまり、が小さくなるまで)繰り返されます。25回の反復後の解は

例題2

次のような線形システムが与えられているとします。

初期近似値として(0, 0, 0, 0)を選択した場合、最初の近似解は次のように与えられます。得られた近似値を用いて、所望の精度に達するまで反復手順を繰り返します。以下は、5回の反復後の近似解です。

0.62.27272-1.11.875
1.047271.7159-0.805220.88522
0.932632.05330-1.04931.13088
1.015191.95369-0.96810.97384
0.988992.0114-1.01021.02135

この系の正確な解は(1, 2, −1, 1)である。

Pythonの例

numpyをnpとしてインポートする   反復制限 =  1000# 行列を初期化するA  =  np .配列([[ 10. ,  - 1. ,  2. ,  0. ], [ - 1. ,  11. ,  - 1. ,  3. ], [ 2. ,  - 1. ,  10. ,  - 1. ], [ 0.0 ,  3. ,  - 1. ,  8. ]])# RHSベクトルを初期化するb  =  np .配列([ 6. ,  25. ,  - 11. ,  15. ])# システムを印刷するprint ( "システム:" ) i が 範囲 ( A .形状[ 0 ] )の場合: row  =  [ f " { A [ i , j ] } *x { j + 1 } " jは範囲A . shape [ 1 ] ))]        print ( f ' { " + " . join ( row ) } = { b [ i ] } ' )印刷()x  =  np . zeros_like ( b ) it_countが 範囲内の 場合( ITERATION_LIMIT ):  it_count  !=  0 の場合: print ( f "反復{ it_count } : { x } " ) x_new  =  np . zeros_like ( x )  i が 範囲 ( A .形状[ 0 ] )の場合: s1  =  np . dot ( A [ i ,  : i ],  x [: i ]) s2  =  np . dot ( A [ i ,  i  +  1 :],  x [ i  +  1 :]) x_new [ i ]  =  ( b [ i ]  -  s1  -  s2 )  /  A [ i ,  i ]  x_new [ i ]  ==  x_new [ i - 1 ]の場合: 壊す  np . allclose ( x  x_new  atol = 1e-10  rtol = 0 )の場合: 壊す x  =  x_newprint ( "解決策: " )印刷( x )誤差 =  np . dot ( A ,  x )  -  bprint ( "エラー:" )印刷(エラー)

重み付きヤコビ法

重み付きヤコビ反復法は、パラメータを使用して反復を計算します。

が通常の選択肢となる。 [1]の関係から、これは次のようにも表される。

ここで、 は反復における代数残差です

対称正定値の場合の収束

システム行列が対称正定値である場合、収束を示すことができます。

を反復行列とする。すると、収束は保証される

ここで最大固有値です。

スペクトル半径は、 の特定の選択に対して次のように 最小化できます。ここで、は行列条件数です

参照

参考文献

  1. ^ Saad, Yousef (2003). 疎線形システムのための反復法(第2版). SIAM . p. 414. ISBN 0898715342
  • この記事には、 GFDLライセンスの下にある CFD-Wiki の記事 Jacobi_method のテキストが組み込まれています
  • ブラック、ノエル、ムーア、シャーリー、ワイスタイン、エリック・W.「ヤコビ法」。MathWorld
  • www.math-linux.com の Jacobi 法
Retrieved from "https://en.wikipedia.org/w/index.php?title=Jacobi_method&oldid=1309522917"