数値解析 第14回 (4) 累乗法に関する注意
複素数が必要な場合
複素行列、あるいは実行列でも固有値が複素数の場合の注意です。
Rem.11 累乗法・デフレーションで
複素数が必要な場合 は次の2点を修正します:
- 標準内積の定義には複素共役が必要で
$\dps{(\xxx,\yyy)=\sum_{i=1}^n\,\overline{x_i}\,y_i}$
となります。
- Alg.6 のループの終了条件は
( $\vvv$ ≒ 旧$\,\vvv$ ) or ( $\vvv$ ≒ $-$旧$\,\vvv$ )
では駄目で、
$\vvv$ ≒ ( 旧$\,\vvv$ の或るスカラー倍 )
あるいは
成分比 $\dps{\left(\frac{v_i}{\small{\mbox{旧}}\,v_i}\right)}$ がほぼ一定
とします。これは、複素ベクトルは「複素数倍しても同じ方向だと考える」からです。
絶対値の等しい固有値がある場合の工夫
例えば回転の行列など、
実行列が複素数の固有値 $\lambda$ を持つときは、
その複素共役 $\overline{\lambda}$ も固有値になり、
$\big|\,\overline{\lambda}\,\big| = \big|\,\lambda\,\big|$
ゆえ、
Th.9 の条件 $(\sharp)$ が満たされません。
しかし、次の工夫により「累乗法&デフレーション」作戦が使えるようになります。
工夫
- 複素乱数 $\alpha$ を取る。
- $B=A+\alpha E$ とおく。
- $B$ に「累乗法&デフレーション」を適用して、$B$ の固有値・固有ベクトル
$(\mu_j,\www_j)$ ( $j=1,2,\cdots,n$ )
を求める。
- $\lambda_j=\mu_j-\alpha$ とおく。
- $\vvv_j=\www_j$ とおく。
実際、
\begin{align}
A\vvv_j=(B-\alpha E)\www_j
&=B\www_j-\alpha\www_j \\
&=\mu_j\www_j-\alpha\www_j =(\mu_j-\alpha)\www_j=\lambda_j\vvv_j \\
\end{align}
ゆえ $(\lambda_j,\vvv_j)$ は $A$ の固有値・固有ベクトルになります。
そして $\alpha$ が乱数なので、高い確率で $\mu_j=\lambda_j+\alpha$ たちの絶対値は全て異なります。