QR 分解
QR 分解は、対称行列と非対称行列を含む一般の行列を対角化するための、最も効率的で広く使われている方法の一つです。QR アルゴリズムは、行列 を直交行列 と上三角行列 の積に反復的に分解することで機能します。この分解を繰り返し適用し、行列を として再構成することで、行列は対角形または三角形に収束し、そこから固有値を取り出すことができます。固有ベクトルは 行列の累積積から得られます。
数学的基礎
行列 に対して、QR 分解は次で与えられます。
ここで、
- は直交行列()、
- は上三角行列です。
QR アルゴリズムは、この分解を反復的に適用して を対角形または三角形に収束させます。
- から始めます。
- 各反復 について、
- QR 分解を計算します:。
- 行列を再構成します:。
- が対角行列または三角行列に収束するまで繰り返します。
の固有値は最終的な行列 の対角成分として得られ、固有ベクトルはすべての 行列の積から得られます。
アルゴリズム
初期化:
- 行列 から始めます。
QR 分解:
- を と に分解します。
再構成:
- 行列 を次のように再構成します。
変換の累積:
- 固有ベクトル行列 を次のように更新します。
- (単位行列)と初期化します。
収束の確認:
- が十分に対角形または三角形になる(すなわち、非対角要素が指定した許容誤差を下回る)まで、この過程を繰り返します。
固有値と固有ベクトルの抽出:
- 固有値は最終的な の対角要素です。
- 固有ベクトルは最終的な の各列です。
例
例として、単精度演算を用いて実対称行列の QR 分解を行います。
ステップ 1:初期化
行列 から始めます。
ステップ 2:1 回目の QR 反復
ステップ 2.1: と の計算
グラム・シュミットの直交化法を用いて の QR 分解を行います。
の第 1 列: の第 1 列を規格化します。
したがって、
の第 2 列: の第 2 列を に対して直交化します。
を計算します。
を規格化します。
したがって、
の第 3 列: の第 3 列を と に対して直交化します。
を計算します。
を規格化します。
したがって、
と の構築:
ステップ 2.2: の更新
を計算します。
ステップ 3:2 回目の QR 反復
ステップ 3.1: と の計算
更新された の QR 分解を行います。
の第 1 列: の第 1 列を規格化します。
したがって、
の第 2 列: の第 2 列を に対して直交化します。
を計算します。
を規格化します。
したがって、
の第 3 列: の第 3 列を と に対して直交化します。
を計算します。
を規格化します。
したがって、
と の構築:
ステップ 3.2: の更新
を計算します。
ステップ 4:収束の確認
すべての非対角要素が許容誤差 を下回っているかを確認します。この場合、非対角要素はすでにゼロなので、行列 は対角化されています。
収束後、対角化された行列 は次のようになります。
最終結果
単精度の QR 分解を用いて計算した の固有値は次のとおりです。
要点
単精度の QR 分解法で得られる固有値は真の値に近いものの、丸め誤差のためにわずかに異なることがあります。より高い精度を得るには、倍精度演算を用いるか、より厳しい収束条件のもとで反復回数を増やすことをお勧めします。
利点
- 効率性:QR アルゴリズムは大きな行列に対して非常に効率的です。
- 汎用性:対称行列と非対称行列の両方に使えます。
- 安定性:このアルゴリズムは数値的に安定で頑健です。
制限
- 計算コスト:非常に大きな行列では、QR 分解のステップの計算コストが高くなることがあります。
- 非対称行列に対する収束の遅さ:非対称行列では、多くの反復が必要になることがあります。