ヤコビ反復法シミュレーター 戻る
数値解析

ヤコビ反復法シミュレーター — 連立一次方程式

2元連立一次方程式 A·x=b をヤコビ反復法で解くツールです。係数行列と右辺、反復回数を変えると、対角優位性とスペクトル半径から収束するか発散するかが判定され、誤差の収束曲線・反復値の推移・2直線と反復点列がリアルタイムで見えます。

パラメータ設定
係数 a₁₁
第1式の x₁ の係数(対角成分)
係数 a₁₂
第1式の x₂ の係数(非対角成分)
係数 a₂₁
第2式の x₁ の係数(非対角成分)
係数 a₂₂
第2式の x₂ の係数(対角成分)
右辺 b₁
第1式の右辺の定数
右辺 b₂
第2式の右辺の定数
最大反復回数
変化が 1e-8 未満になれば早期終了
計算結果
解 x₁
解 x₂
反復回数
対角優位性
スペクトル半径 ρ
収束/発散
解空間 — 2直線と反復点列

2本の方程式直線の交点が真の解です。(0,0) から始まる反復点列が、収束時は交点へ近づき、発散時は外へ離れていきます。

誤差の収束 ‖x_k − x_exact‖(対数軸)
反復値の推移 x₁・x₂
理論・主要公式

$$x_i^{(k+1)}=\frac{1}{a_{ii}}\left(b_i-\sum_{j\ne i}a_{ij}\,x_j^{(k)}\right)$$

ヤコビ反復の更新式。各未知数 x_i を対角成分 a_ii で割って求め、右辺には常に1つ前の反復値 x_j^(k) だけを使います。

$$\rho(\text{反復行列})\lt 1\quad(\text{対角優位なら成立})$$

収束条件。反復行列のスペクトル半径 ρ が1未満なら収束、1以上なら発散します。係数行列が厳密に対角優位ならこの条件は必ず満たされます。

$$\rho=\sqrt{\left|\dfrac{a_{12}}{a_{11}}\cdot\dfrac{a_{21}}{a_{22}}\right|}$$

2×2 の場合のスペクトル半径。ヤコビ法は古い値だけを使うため並列化が容易ですが、ガウス・ザイデル法より収束は遅くなります。

ヤコビ反復法とは

🙋
連立方程式って、中学で習った代入法とか加減法で解くものですよね?「ヤコビ反復法」っていうのは、それとは別の解き方なんですか?
🎓
そう、まったく別の発想なんだ。代入法や行列式は「一発で正確な答えを出す」直接法。一方ヤコビ法は「とりあえず適当な答えから出発して、少しずつ正解に近づける」反復法だよ。このツールでは出発点を x=(0,0) にしている。最初は全然違う値だけど、更新式を何度も回すうちに真の解にじわじわ寄っていくんだ。
🙋
わざわざ近づけていくなんて回りくどくないですか?代入法で一発で解けばいいのに。
🎓
2元や3元ならそうだね。でも実務のCAEだと未知数が100万個とか平気で出てくる。そんな巨大な行列を直接法で解くとメモリも計算量も爆発するんだ。ところが反復法なら、行列の「ほとんどの成分がゼロ」という疎な性質をそのまま生かせて、必要な精度になったら途中で止められる。だから大規模問題では反復法が主役なんだよ。ヤコビ法はその一番シンプルな入口なんだ。
🙋
なるほど。でも左のスライダーで a₁₂ を大きくしていくと、急に「発散」って赤く出ました。これは何が起きたんですか?
🎓
いい実験だね。反復法には「必ず収束するわけではない」という落とし穴がある。鍵になるのが対角優位性だ。各行で、対角の係数(a₁₁ や a₂₂)が、その行の他の係数より絶対値で大きいことを「対角優位」という。これが成り立っているとヤコビ法は必ず収束する。a₁₂ を大きくして対角優位が崩れると、スペクトル半径 ρ が1を超えて、反復のたびに誤差が増える=発散になるんだ。
🙋
スペクトル半径 ρ、結果カードにも出てますね。これは収束するかどうかだけを表す数字なんですか?
🎓
それだけじゃないんだ。ρ は収束の「速さ」も決める。ざっくり言うと、1反復ごとに誤差が ρ 倍に縮む。だから ρ=0.3 ならどんどん桁が落ちて数回で収束、ρ=0.95 だと牛歩で何十回も回さないと精度が出ない。下の「誤差の収束」グラフを対数軸で見ると、傾きがちょうど log(ρ) の直線になる。ρ が小さいほど急な下り坂、1に近いほど水平に近い、というのが見て取れるよ。
🙋
ヤコビ法に似た方法で「ガウス・ザイデル法」って聞いたことがあります。何が違うんですか?
🎓
更新に使う値のタイミングが違うんだ。ヤコビ法は1ステップの間、右辺に必ず「1つ前」の値だけを使う。x₁ も x₂ も同じ古い情報から同時に計算する。ガウス・ザイデル法は、x₁ を更新したらすぐその新しい x₁ を x₂ の計算に使う。新鮮な情報を使う分、たいてい収束が速い。ただしヤコビ法は各成分を完全に独立に計算できるから、並列計算機やGPUと相性抜群。今でも大規模疎行列の前処理や緩和法の基礎として現役なんだよ。

よくある質問

ヤコビ反復法は連立一次方程式 A·x=b を直接解かず、近似解を少しずつ更新して真の解に近づける反復法です。各方程式を対角成分について解き、x_i^(k+1) = (b_i − Σ_(j≠i) a_ij x_j^(k)) / a_ii で次の近似を作ります。重要な特徴は、右辺にすべて1つ前のステップの値 x^(k) だけを使う点です。すべての未知数を同時に更新するため、計算が並列化しやすい一方、ガウス・ザイデル法より収束は遅くなります。
ヤコビ反復法は反復行列のスペクトル半径 ρ(固有値の絶対値の最大)が ρ<1 のとき収束し、ρ≥1 のとき発散します。2×2 の場合、反復行列は [[0, −a12/a11], [−a21/a22, 0]] で、ρ = √|(a12/a11)(a21/a22)| です。十分条件として「係数行列が厳密に対角優位」、つまり各行で対角成分の絶対値が他の成分の和より大きい(|a11|>|a12| かつ |a22|>|a21|)ならば必ず収束します。対角優位でなくても ρ<1 なら収束しますが、設計上は対角優位を満たすのが安全です。
スペクトル半径 ρ は収束するかどうかだけでなく、収束の「速さ」も決めます。1反復あたり誤差はおおよそ ρ 倍になるので、誤差を10分の1にするには約 1/log10(1/ρ) 回の反復が必要です。例えば ρ=0.3 なら2〜3反復ごとに桁が1つ落ち、ρ=0.9 なら20反復以上かかります。誤差グラフを対数軸で見ると、傾きが log(ρ) の直線になり、ρ が小さいほど急な下り坂になります。ρ が1に近いほど反復回数が増え、ρ≥1 では誤差が発散します。
どちらも同じ反復法ですが、更新に使う値が異なります。ヤコビ法は1ステップ内では常に1つ前の x^(k) だけを使うのに対し、ガウス・ザイデル法は同じステップ内で更新済みの新しい値を即座に使います。このため一般にガウス・ザイデル法のほうが収束が速く、多くの場合スペクトル半径はヤコビ法の約2乗になります。ただしヤコビ法は各成分が独立に計算できるため並列計算機やGPUと相性がよく、大規模疎行列では今でも前処理や緩和法の基礎として使われます。

実世界での応用

大規模CAE解析のソルバー基盤:構造解析・熱伝導・電磁界解析などの有限要素法や差分法は、最終的に巨大な連立一次方程式に帰着します。未知数が数十万〜数千万個になると直接法(LU分解)はメモリが足りなくなるため、反復法が用いられます。ヤコビ法そのものが最終ソルバーになることは少ないものの、共役勾配法やマルチグリッド法の「平滑化(スムージング)」工程や前処理として組み込まれ、高周波の誤差成分を素早く取り除く役割を果たします。

並列計算・GPUアクセラレーション:ヤコビ法の各成分の更新は完全に独立しているため、すべての未知数を同時並列で計算できます。これは数千〜数万コアのGPUやスーパーコンピュータと相性が抜群で、ガウス・ザイデル法のように「順番」に縛られないという大きな利点になります。実装が単純で通信パターンも規則的なため、並列ソルバーの基本ブロックとして今も広く使われています。

画像処理・ポアソン方程式:画像のシームレス合成(ポアソン画像編集)、流体シミュレーションの圧力投影、影や照明の計算などは、いずれもポアソン方程式という連立一次方程式を解く問題です。これらの分野ではヤコビ反復(あるいはその重み付き版)が、GPU上でピクセルごとに並列実行されるカーネルとして実装され、リアルタイム処理を支えています。

数値解析の教育・アルゴリズム理解:ヤコビ法は反復法の中でもっとも単純で、収束条件・スペクトル半径・誤差の幾何級数的減少といった反復法の核心概念を、最小限のコードで体験できます。本ツールのように2元系で挙動を可視化すると、対角優位を崩したときに突然発散する様子や、ρ が収束速度を支配する様子が直感的に理解でき、より高度な反復法を学ぶ足場になります。

よくある誤解と注意点

まず多い誤解が、「反復法は回数を増やせばいつか必ず解にたどり着く」というものです。反復法に終わりが保証されているのは、収束する場合だけです。係数行列が対角優位でなく、スペクトル半径 ρ が1以上だと、反復のたびに誤差が ρ 倍に増幅され、何回回しても解から遠ざかります。本ツールで a₁₂ や a₂₁ を大きくして対角優位を壊すと、その発散をはっきり観察できます。実務では「反復が収束しない」とき、まず方程式の並べ替えや前処理で対角優位性を確保できないかを検討します。

次に、「対角優位は収束の必要条件である」という思い込みです。対角優位はあくまで十分条件で、必要条件ではありません。対角優位でなくてもスペクトル半径が ρ<1 でありさえすれば、ヤコビ法はちゃんと収束します。逆に、対角優位が成り立っていれば ρ<1 が保証されるので「迷ったら対角優位を満たしておけば安全」というのが実用的な指針です。本ツールは対角優位性と ρ の両方を表示するので、両者が一致しないケースも確認できます。

最後に、「ヤコビ法は遅いから実用にならない」という決めつけです。確かに単独のソルバーとしてはガウス・ザイデル法や共役勾配法に劣ります。しかしヤコビ法の真価は、並列性の高さと「高周波誤差を素早く均す」性質にあります。マルチグリッド法では、重み付きヤコビ法が各レベルのスムーザとして不可欠です。また対角成分だけを使う単純さから、最も基本的な前処理(ヤコビ前処理)としても広く使われます。収束が遅いからと切り捨てず、適材適所で部品として使うのが現代的な使い方です。なお本ツールでは発散時に反復値を ±1e6 で打ち切り、数値が NaN や Infinity にならないようにしています。

使い方ガイド

  1. 係数行列の要素a₁₁、a₁₂、a₂₁、a₂₂を入力し、右辺ベクトルb₁、b₂を設定する
  2. 初期値x₁⁽⁰⁾=0、x₂⁽⁰⁾=0から反復を開始し、最大反復回数と誤差許容値(例:10⁻⁶)を指定する
  3. スペクトル半径ρが1未満であることを確認してから実行ボタンをクリックし、収束曲線と各変数の収束過程を観察する

具体的な計算例

5x₁-x₂=4、-x₁+4x₂=3の連立方程式:a₁₁=5、a₁₂=-1、a₂₁=-1、a₂₂=4、b₁=4、b₂=3を入力した場合、反復行列G=D⁻¹(L+U)のスペクトル半径ρ≈0.447となり収束性を満たす。約8回の反復でx₁≈1.0、x₂≈1.0に収束し、相対誤差は10⁻⁶以下に低下する。

実務での注意点