QR法は、以下に示すn次正方行列\( A \)の三角化を繰り返すことで、最終的に対角要素が固有値となる上三角行列に収束する性質を利用します。
\( A \)の三角化には、ユニタリ行列\( Q \)による相似変換を用います。
この計算は、\( k \rightarrow \infty \)で\( A^{(k)} \)の左下半分が0に収束し上三角化され、対角要素が\( A \)の固有値に収束します。
実際の数値計算(コンピュータでの計算)では∞の繰り返しはできないため、\( A^{(k)} \)の変化が収束判定値以下になったところを近似解として採用します。
(2)ヘッセンベルグ化した行列\( B \)を、上記<QR法のステップ>で上三角化します。
このとき、\( B^{(1)}, B^{(2)}, \cdots \)もまたヘッセンベルグ行列になります(証明略)。
ヘッセンベルグ行列をQR分解する際は、
ギブンス行列\( G \)を用いて、以下の手順で行います
(k回目を例にとります)。
<QR分解>
- 2行1列目の要素を0にする:\( G_1^t \ B^{(k-1)} = B_1 \)
- 3行2列目の要素を0にする:\( G_2^t \ B_1 = G_2^t \ G_1^t B^{(k -1)} = B_2 \)
- ・・・
- n行n-1列目の要素を0にする:\( G_{n-1}^t \ B_{n-2} \ \)\( = G_{n-1}^t \cdots \ G_1^t \ B^{(k -1)} \ \)\(= R_k \)
このときギブンス行列\( G_i \)はユニタリ行列であることから、\( G_1 \cdots G_{n-1} = Q_k \ \)とでき(ユニタリ行列)、
\[
G_{n-1}^t \cdots \ G_1^t \ B^{(k -1)}
=
Q_k^t B^{(k -1)}
=
R_k
\]
となります。
QR分解にギブンス行列を用いるのは、\( i \)行\( i+1 \)列成分を0にするための計算を、\( i, i+1 \)の二行分のみ行えばよい、つまり計算量を減らせる利点があるためです。
例えば2行1列目を0にする場合、ギブンス変換では1,2行目のみ計算することになります(計算部分を赤字にしています)。
\[
\begin{eqnarray}
& G_1^t B
& =
\begin{pmatrix}
& \cos{\theta} & -\sin{\theta} & 0 & \cdots &
\\
& \sin{\theta} & \cos{\theta} & 0 & \cdots &
\\
& 0 & 0 & 1 & &
\\
& \vdots & & & \ddots &
\end{pmatrix}
\begin{pmatrix}
& b_{11} & b_{12} & b_{13} & \cdots &
\\
& b_{21} & b_{22} & b_{23} & \cdots &
\\
& 0 & b_{32} & b_{33} & &
\\
& \vdots & & \ & \ddots &
\end{pmatrix}
\\
& & =
\begin{pmatrix}
& \txc{red}{ b_{11} \cos{\theta} - b_{21} \sin{\theta} } \quad & \txc{red}{ b_{11} \cos{\theta} - b_{21} \sin{\theta} } & & \txc{red}{ \cdots } &
\\
& \txc{red}{ b_{11} \sin{\theta} + b_{21} \cos{\theta} } \quad & \txc{red}{ b_{11} \sin{\theta} + b_{21} \cos{\theta} } & & \txc{red}{ \cdots } &
\\
& 0 & b_{32} & b_{33} & &
\\
& \vdots & & & \ddots &
\end{pmatrix}
\end{eqnarray}
\]
このとき、
\[
\cos \theta
=
\frac{ b_{11} }{ \sqrt{ b_{11}^2 + b_{21}^2 } }
, \quad
\sin \theta
=
\frac{ -b_{21} }{ \sqrt{ b_{11}^2 + b_{21}^2 } }
\]
とすれば、目的は達せられます。
\[
\begin{eqnarray}
& G_1^t B
& =
\begin{pmatrix}
& \txc{red}{ b_{11}' } \ & \txc{red}{ b_{12}' } \ & \txc{red}{ b_{13}' } \ & \txc{red}{ \cdots } &
\\
& \txc{red}{ 0 } \ & \txc{red}{ b_{22}' } \ & \txc{red}{ b_{23}' } \ & \txc{red}{ \cdots } &
\\
& 0 \ & b_{32} \ & b_{33} & &
\\
& \vdots \ & \ & \ & \ddots &
\end{pmatrix}
\end{eqnarray}
\]