べき乗法シミュレーター 戻る
数値線形代数シミュレーター

べき乗法シミュレーター — 最大固有値の反復計算

3×3対称行列に v ← Av/‖Av‖ を繰り返し、最大絶対値固有値と固有ベクトルを推定。Rayleigh商で固有値を読み、収束比 |λ₂/λ₁| が決める収束速度を体感できます。

パラメータ設定
反復回数 k
対角成分 A[1,1]
対角成分 A[2,2]
対角成分 A[3,3]
対象行列 A
410
131
012
非対角成分は固定(A[1,2]=A[2,3]=1, A[1,3]=0)
初期ベクトル v₀ = (1, 1, 1)/√3
計算結果
推定最大固有値 λ₁ (Rayleigh商)
真値 λ₁ (基準: 3+√3)
推定誤差 |λ_est − λ_true|
収束比 |λ₂/λ₁|
反復ごとの λ_est と誤差収束

上段:λ_est[k](赤線)と λ_true(灰色水平線)/下段:log₁₀|λ_est[k]−λ_true|(青線)。傾き ≈ log₁₀|λ₂/λ₁|

理論・主要公式

べき乗法は、与えられた行列 $A$ の最大絶対値固有値とその固有ベクトルを反復で求める基本アルゴリズムです。

基本反復(正規化付き)。$v_0$ は適当な初期ベクトル:

$$v_{k+1} = \frac{A\,v_k}{\|A\,v_k\|_2}$$

Rayleigh商による固有値推定。$v_k$ が固有ベクトルに近づくほど精度が上がる:

$$\lambda_k = \frac{v_k^{\!\top} A\,v_k}{v_k^{\!\top} v_k}$$

誤差の収束速度。優勢比 $r = |\lambda_2/\lambda_1|$ が小さいほど早い:

$$|\lambda_k - \lambda_1| \;\sim\; r^{\,2k} \quad (\text{対称行列の場合})$$

この行列は対称なので実固有値を持ち、デフォルト値では特性方程式 $\lambda^3 - 9\lambda^2 + 24\lambda - 18 = 0$ から $\lambda_1 = 3+\sqrt{3} \approx 4.732$、$\lambda_2 = 3$、$\lambda_3 = 3-\sqrt{3} \approx 1.268$ となります。

べき乗法シミュレーターとは

🙋
行列の固有値って、解析的に求めるなら特性方程式を解けばいいですよね?べき乗法ってわざわざ反復で求める意味あるんですか?
🎓
3×3ならそれでもいいけど、現場の行列は何万次元・何百万次元もある。3次方程式すら閉じた式だと使い物にならない次元では、特性多項式を作ること自体が破綻するんだ。べき乗法は「最大絶対値の固有値1つだけ」をターゲットに、行列ベクトル積 $Av$ を繰り返すだけで答えが出る。Googleの初期PageRankはまさにこれで、ウェブグラフ全体の固有ベクトルを計算していたんだよ。
🙋
え、PageRankもべき乗法だったんですか!上のシミュレーターで反復回数を1にすると λ_est がだいぶズレますね。20回くらいまで回すと真値の4.732にぴったり収まる。
🎓
それが収束だ。Rayleigh商 $v^\top A v / v^\top v$ は、$v$ が固有ベクトルにどれだけ近いかで精度が決まる。下段のグラフで誤差の対数を見て——直線になっているだろう。傾きが「収束比 $|\lambda_2/\lambda_1|$」で決まっていて、これが小さいほど早く下がる。デフォルト行列だと $3/4.732 \approx 0.634$ で、1反復で約0.6倍ずつ誤差が落ちていく計算だ。
🙋
対角成分のスライダーを動かして A[1,1] を10にしたら、収束比のカードが小さくなって、誤差グラフがすごい急角度で落ちました!
🎓
そう、最大固有値が他から離れているほどべき乗法は得意なんだ。逆に固有値同士が接近している(収束比が1に近い)と、何百反復しても収束しない。実務では「シフト法」で人為的に固有値の比を変えたり、Rayleigh商シフトで毎ステップ最適なシフト値を更新したりして、収束を加速する。これらの工夫の根っこには、ぜんぶこの収束比の理論がある。
🙋
固有値1つだけじゃなくて全部欲しい場合は?
🎓
そこで QR 法の出番だ。実は QR 法は「全方向で同時にべき乗法を回しながら直交化する」と理解できる。つまりべき乗法は QR 法の心臓部でもある。LAPACK や NumPy の eig 関数も、内部では Hessenberg 化+シフト付き QR を使っていて、その理論的バックボーンが今動かしているこの単純な反復なんだよ。

よくある質問

最大絶対値固有値とその固有ベクトルだけを欲しい場面で使われます。代表例はGoogleのPageRankで、ウェブグラフの遷移行列に対してべき乗法を回し、定常分布(最大固有値1に対応する固有ベクトル)をページの重要度として用います。構造解析でも、最低次の固有振動数を概算するために逆べき乗法(A⁻¹に対するべき乗法)が使われます。データ解析の主成分分析(PCA)の第1主成分も、共分散行列に対するべき乗法で得られます。
逆べき乗法は A⁻¹ に対しべき乗法を適用するもので、最小絶対値固有値が得られます。シフト付き逆べき乗法は (A−σI)⁻¹ に対し反復することで、シフト値 σ に最も近い固有値を取り出します。これにより、欲しい固有値の概略値さえ分かれば任意の固有値・固有ベクトルを高精度に求められます。各反復で線形方程式を一度解くコストはかかりますが、収束は通常極めて早いのが利点です。
収束速度は |λ₂/λ₁| の比に支配され、これが1に近いほど遅くなります。対策としては、シフト法(A−σIに変換し相対比を変える)、Rayleigh商シフト(毎反復ごとに最良のσを更新)、または重根や複素固有値が原因なら QR 法などのより一般的な手法に切り替えるのが定石です。初期ベクトルが対象固有ベクトルに直交していると理論上は収束しませんが、実際には丸め誤差で成分が混入し最終的に収束します。
QR法は同時にすべての固有値を求める汎用解法で、内部的には「直交化付きべき乗法を全方向で同時に走らせる」ものとして理解できます。各反復で A=QR と分解し A←RQ で更新する操作は、上三角化を進める過程でべき乗法の収束ロジックを暗に使っています。シフト付きQR法、Hessenberg化、二重シフトなどを組み合わせることで、現代の固有値ライブラリ(LAPACK等)の基本アルゴリズムになっています。

実世界での応用

検索エンジンのページランキング:GoogleのオリジナルPageRankは、ウェブの遷移行列に対するべき乗法そのものです。何十億ページもある巨大スパース行列に対して、行列ベクトル積を数十回繰り返すだけで定常分布が得られる——べき乗法の「行列を陽に格納せず Av だけ計算できればよい」性質が、超大規模問題で決定的に効きます。

構造振動解析の最低次固有モード:建物・橋・機械の振動解析では、地震応答や共振を支配する最低次固有振動数(最小固有値)が最も重要です。剛性行列 K と質量行列 M の一般固有値問題 Kx=λMx に対し、シフト付き逆べき乗法を使うと、欲しい固有値だけを高速に取り出せます。FEM ソフトの Lanczos 法や部分空間法も、根底はべき乗法の発展形です。

主成分分析と次元削減:機械学習の前処理として広く使われる主成分分析(PCA)は、データ共分散行列の最大固有値・固有ベクトルを順に求めることに相当します。第1主成分はべき乗法、続く成分は得られた固有ベクトル方向を引き去る「デフレーション」を組み合わせて取得できます。レコメンデーションの SVD/特異値分解も、べき乗法系の反復で計算されることが多いです。

マルコフ連鎖の定常分布:遷移確率行列 P に対する固有値1の固有ベクトル(左固有ベクトル)が、長時間後の状態分布を表します。物理化学のモンテカルロシミュレーション、待ち行列の解析、自然言語処理の隠れマルコフモデルなど、確率的システムの平衡状態を求めるあらゆる場面で、べき乗法またはその一般化である Arnoldi 法が活躍します。

よくある誤解と注意点

最も多い誤解は、「べき乗法は常に最大固有値に収束する」と思い込むことです。正確には「最大絶対値固有値が一意で、初期ベクトルがその固有ベクトルに直交していないとき」に収束します。例えば固有値が ±λ のように同じ絶対値で符号違いの場合、反復は振動して収束しません。実対称行列なら固有値はすべて実数で、絶対値が一致するのは符号違いの場合だけ。シミュレーターで対角成分を極端に変えても対称行列のままなので、振動は通常起きませんが、一般の非対称行列では注意が必要です。

次に多いのが、「収束は反復回数だけで決まる」と思うことです。実際には収束比 $r = |\lambda_2/\lambda_1|$ が支配的で、$r$ が0.99のような行列は1000回反復しても誤差が大きく残ります。シミュレーターで A[1,1] を10、A[2,2]/A[3,3] を1にして比をかなり大きくすると、5反復ほどで桁違いに精度が上がります。逆に対角成分が拮抗していると、反復回数を倍にしてもほとんど効かない。設計上は「シフト法で比を改善する」のが現代的なアプローチです。

最後に、「Rayleigh商と最終ベクトル v_k の比 (Av_k)_i / (v_k)_i は同じものだ」と誤解する点に注意してください。後者は理論上はどの成分 i を取っても λ になりますが、$v_k$ がまだ収束しきっていない段階では成分ごとに値がばらつき、信頼できません。Rayleigh商 $v^\top A v / v^\top v$ は最小二乗的に「最も整合する固有値」を返すため、同じ反復回数なら通常は2乗オーダーで精度が高くなります。実装では必ず Rayleigh商を使うのが鉄則です。