ヤコビ法による固有値計算シミュレーター 戻る
数値解析

ヤコビ法による固有値計算シミュレーター

対称な 3×3 行列の固有値を、ヤコビ法(平面回転の繰り返し)で求めるツールです。対角成分と非対角成分を変えると、何回の回転で対角化できるか、非対角成分がどう消えていくか、対角成分がどう固有値へ収束するかがリアルタイムで分かります。

パラメータ設定
対称行列 A の対角成分3つと非対角成分3つを設定します。対称性は自動的に保たれ、A[i][j]=A[j][i] となります。
対角成分 a₁₁
対角成分 a₂₂
対角成分 a₃₃
非対角成分 a₁₂ = a₂₁
非対角成分 a₁₃ = a₃₁
非対角成分 a₂₃ = a₃₂
非対角成分をすべて0にすると行列は最初から対角行列で、回転は0回になります。
計算結果
固有値 λ₁
固有値 λ₂
固有値 λ₃
反復(回転)回数
最終非対角ノルム
収束判定
行列の対角化アニメーション

3×3 行列の各セルを値の大きさで色付けして表示します。記録した回転の系列を再生し、非対角セルがゼロへ薄れ、対角セルが固有値へ落ち着く様子をループ再生します。各ステップで消去中の非対角成分を黄色で強調します。

非対角ノルムの収束
対角成分の収束
理論・主要公式

$$\theta=\tfrac12\arctan\!\frac{2a_{pq}}{a_{qq}-a_{pp}}$$

回転角 θ は、最大の非対角成分 a_pq(p<q)をちょうどゼロにするように選びます。a_pp・a_qq は対応する2つの対角成分です。

$$A\leftarrow J^{\mathsf T} A\,J$$

各回転は直交行列 J(c=cosθ, s=sinθ をもつ平面回転)による相似変換です。この変換は固有値を変えないまま、選んだ非対角成分をゼロにします。

$$\mathrm{off}(A)=\sqrt{\sum_{i\neq j}a_{ij}^2}\;\longrightarrow\;0$$

非対角フロベニウスノルム off(A) は回転のたびに単調に減少し、これが十分小さくなったとき対角成分が固有値になります。

ヤコビ法(固有値計算)とは

🙋
「ヤコビ法で固有値を求める」って聞いたんですけど、固有値ってそもそも、行列をぐるぐる回して求めるものなんですか?
🎓
ざっくり言うと、その通りなんだ。固有値って「対角行列に直したときの対角成分」のことだよね。ヤコビ法のアイデアはとても素直で、対称行列を少しずつ回転させて、非対角成分をゼロに追い込んでいく。完全に対角行列になったら、残った対角の3つの数がそのまま固有値、というわけ。左でa₁₂やa₂₃を動かすと、何回の回転で対角化できるかが変わるよ。
🙋
回転させると数が変わっちゃいそうですけど、それで固有値が正しいって言えるんですか?
🎓
いい疑問だね。ここがヤコビ法の核心なんだ。各ステップでやっているのは「相似変換」A←JᵀAJ。J は回転行列(直交行列)で、相似変換は固有値を絶対に変えないという性質がある。だから行列の中身の数字はどんどん変わっても、固有値だけはずっと保存されている。回転で非対角成分を消すと、その結果として対角成分が「本当の固有値」へ近づいていく、というカラクリだよ。
🙋
どの非対角成分から消していくんですか?順番とか決まっているんですか?
🎓
古典ヤコビ法では「いちばん大きい非対角成分」を狙い撃ちするんだ。各ステップで絶対値が最大の非対角成分 a_pq を探して、それをちょうどゼロにする角度 θ=½arctan(2a_pq/(a_qq−a_pp)) で回転する。一番じゃまな成分から潰すから、非対角の「重み」が効率よく減っていく。下の「非対角ノルムの収束」グラフを見ると、対数軸で一気に下がっていくのが分かるよ。終盤は二次収束といって、ものすごい勢いでゼロに吸い込まれる。
🙋
非対角成分を1個ゼロにしても、回転の影響でほかの成分がまた大きくなったりしませんか?
🎓
鋭いね。確かに1回の回転でいま消したばかりの成分が、次の回転でまた少し復活することはある。でも大事なのは「非対角成分の二乗和」が回転のたびに必ず減るということ。消した成分の分はまるごと対角側へ移り、復活する分はそれより小さい。だから全体として off(A) は単調に減って、必ずゼロに近づく。下の対角成分グラフを見ると、3本の線がそれぞれの固有値にスッと落ち着くのが見えるはずだよ。
🙋
そんなに素直なら、実際の解析ソフトでも固有値はぜんぶヤコビ法で計算しているんですか?
🎓
いや、そこはバランスなんだ。大きな行列だと QR 法のほうが速いから、汎用の固有値ソルバーは QR 法が主流だよ。ただヤコビ法は実装が驚くほど単純で、数値的にとても高精度、しかも各回転がほぼ独立だから並列計算に向く。だから「小さい対称行列を高精度に解きたい」場面、たとえば3×3の応力テンソルから主応力を出すとか、慣性テンソルから主慣性モーメントを出すといった用途では、いまでもヤコビ法が現役なんだ。

よくある質問

ヤコビ法は実対称行列(A[i][j]=A[j][i])の固有値・固有ベクトルを求める手法です。対称行列の固有値は必ず実数になり、ヤコビ法はそれを平面回転の繰り返しだけで安定に取り出します。非対称な行列には基本的に使えず、その場合は QR 法やヘッセンベルグ化を経た一般固有値ソルバーを使います。本ツールは入力した3つの対角成分と3つの非対角成分から対称行列を組み立てるため、常に対称行列が対象になります。
ヤコビ法の各ステップは相似変換 A←JᵀAJ です。J は直交行列(回転行列)なので、相似変換は固有値を一切変えません。各回転は最大の非対角成分をちょうどゼロにするように角度 θ を選びます。回転を繰り返すと非対角成分の二乗和(オフ対角ノルム)が単調に減り、行列は対角行列へ近づきます。固有値は相似変換で不変なので、対角化が完了したときの対角成分がそのまま固有値になります。
QR 法は現在の標準的な固有値ソルバーで、大きな行列でもヤコビ法より高速です。一方ヤコビ法はアルゴリズムが極めて単純で、実装が容易、数値的に非常に高精度、しかも各回転が独立に近いため並列化しやすいという長所があります。収束は終盤で二次収束し、小・中規模の対称行列では十分実用的です。高精度が要求される場面や、構造が単純であることが重視される場面ではヤコビ法が選ばれます。
固有値計算は工学のあらゆる場面に現れます。構造解析では剛性行列と質量行列から固有振動数(モード解析)を求め、応力解析では応力テンソルから主応力・主方向を計算します。慣性テンソルからは主慣性モーメント、共分散行列からは主成分分析(PCA)の主成分が得られます。これらはいずれも小さな対称行列を扱うため、高精度なヤコビ法が適しています。3×3 の応力テンソルや慣性テンソルは、ヤコビ法の典型的な適用対象です。

実世界での応用

構造解析のモード解析:有限要素法で組み立てた剛性行列 K と質量行列 M から、一般固有値問題 Kφ=λMφ を解くと、構造物の固有振動数とモード形状が得られます。実機の縮約モデルでは行列サイズが小さくなることが多く、その小さな対称行列の固有値を高精度に取り出す段階でヤコビ法が使われます。橋・建物・機械部品の共振回避設計の出発点です。

応力テンソルの主応力解析:3×3 の応力テンソルは対称行列です。これをヤコビ法で対角化すると、対角成分が主応力 σ₁・σ₂・σ₃、固有ベクトルが主方向になります。せん断成分のない座標系を見つける操作そのものが固有値問題であり、3×3 という小さなサイズはヤコビ法の最も得意とする対象です。降伏判定や疲労評価の前処理として日常的に使われます。

剛体力学の慣性テンソル:物体の慣性テンソルも対称な 3×3 行列です。ヤコビ法で対角化すると主慣性モーメントと主軸が求まり、回転運動の方程式が大きく簡単になります。人工衛星の姿勢制御、ロボットアームの動力学、車両の挙動解析など、剛体の回転を扱う場面で欠かせない計算です。

主成分分析(PCA)と統計:データの共分散行列は対称半正定値行列です。その固有値・固有ベクトルを求めると、分散が最大となる方向(主成分)が得られ、次元削減や特徴抽出に使えます。変数が少ない問題では共分散行列が小さくなるため、安定で高精度なヤコビ法が好まれます。画像処理・センサーデータ解析・品質管理などで広く使われています。

よくある誤解と注意点

まず多いのが、「ヤコビ法はどんな行列にも使える万能な固有値ソルバーだ」という誤解です。ヤコビ法が前提とするのは実対称行列です。非対称行列に適用しても、相似変換で非対角成分を一掃するという論理が成り立たず、複素固有値も扱えません。非対称行列の固有値が必要なら、ヘッセンベルグ化+シフト付き QR 法など、別のアルゴリズムを選びます。本ツールは入力から必ず対称行列を組み立てるため対象を外しませんが、自分でコードを書くときは「対称性のチェック」を必ず入れてください。

次に、「ヤコビ法は遅いから実用にならない」という思い込み。確かに大規模行列では QR 法のほうが速く、汎用ソルバーの主役は QR 法です。しかしヤコビ法は小・中規模の対称行列では十分速く、終盤は二次収束で一気に詰まります。さらに、ほかのアルゴリズムでは得にくいほどの高精度(特に微小な固有値を相対精度よく求める点)が長所で、並列化のしやすさもあります。「遅い=使えない」ではなく、「規模と要求精度で使い分ける」のが正しい理解です。

最後に、「非対角成分を1つゼロにすれば、その成分はもう二度と変わらない」という誤解。1回の回転は確かに狙った成分をゼロにしますが、その後の別の回転が同じ行・列に触れると、いったんゼロにした成分がわずかに復活することがあります。重要なのは個々の成分ではなく、非対角成分の二乗和(オフ対角ノルム)が回転のたびに必ず減るという事実です。アルゴリズムの収束を判定するときは、特定の1成分ではなく必ずオフ対角ノルム全体を見てください。本ツールの収束判定もこのノルムが許容値を下回ったかどうかで行っています。

使い方ガイド

  1. 対称行列の対角要素a₁₁、a₂₂、a₃₃を入力し、非対角要素a₁₂を指定する(a₁₃、a₂₃は0に設定)
  2. シミュレーション開始ボタンをクリックすると、ヤコビ法が平面回転を繰り返す過程をリアルタイム表示
  3. 各反復で最大非対角要素の位置を特定し、回転角θを計算して行列を更新
  4. 非対角ノルムが収束判定基準(通常10⁻¹⁰)以下になったら終了し、λ₁、λ₂、λ₃を表示

具体的な計算例

鋼材の応力解析で得られた応力テンソル(単位:MPa): a₁₁=250、a₂₂=180、a₃₃=120、a₁₂=45の場合、初期非対角ノルム≈63.6。ヤコビ法により8回の平面回転で収束し、主応力λ₁≈287.4 MPa、λ₂≈198.1 MPa、λ₃≈144.5 MPaを得る。最終非対角ノルムは5.2×10⁻¹¹に達する。各回転ステップで45度付近から徐々に微調整され、数値安定性を確保

実務での注意点