更新:2024/09/16

QR分解とグラムシュミットの直交化法・定義・例題・計算方法について

はるか
はるか
行列を分解したい気分。
ふゅか
ふゅか
じゃ、QR分解をやってみよう!

1. QR分解とは

QR分解とは、行列を直交行列 \(Q\) と上三角行列 \(R\) に分解する方法です。特に、任意の \(m \times n\) 行列 \(A\)(ただし \(m \geq n\))に対して、次のように分解することができます。

\[ A = QR \]

ここで、

  • \(Q\) は \(m \times n\) 行列で、列ベクトルが直交する(つまり、\(Q^T Q = I\) となる)行列です。ただし、n×n行列になる場合は直交行列となる。
  • \(R\) は \(n \times n\) の上三角行列で、上三角行列とは対角成分より下の部分がすべてゼロである行列を指します。

QR分解を求める方法として、グラム・シュミットの直交化法や、ハウスホルダー変換、ギヴンズ回転といった手法がよく用いられます。

2. QR分解を求める方法

ふゅか
ふゅか
グラム・シュミットの直交化法を使ってQR分解を行うね!

まず、行列 \( X \) を \( n \times n \) の正則行列としますここで、行列 \( X \) を次のように列ベクトル \( \mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_n \) で表します。

\[ X = \begin{bmatrix} \mathbf{x}_1  \mathbf{x}_2  \dots  \mathbf{x}_n\end{bmatrix} \]

このとき、各列ベクトル \( \mathbf{x}_i \) は \( \mathbb{R}^n \) に属し、互いに線形独立です。

次に、グラムシュミットの直交化法を用いて、これらの線形独立なベクトル \( \mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_n \) を用いて、直交ベクトル \( \mathbf{y}_1, \mathbf{y}_2, \dots, \mathbf{y}_n \) を構成します。

最初のベクトル \( \mathbf{y}_1 \) は次のようになります。

\[ \mathbf{y}_1 = \frac{\mathbf{x}_1}{\|\mathbf{x}_1\|} \]

このとき、\( \mathbf{x}_1 \) は次のように \( \mathbf{y}_1 \) を用いて表されます。

\[ \mathbf{x}_1 = \|\mathbf{x}_1\| \mathbf{y}_1 \]

2番目のベクトル \( \mathbf{y}_2 \) は次のようになります。

\[ \mathbf{y}_2 = \frac{\mathbf{x}_2 – (\mathbf{y}_1, \mathbf{x}_2)\mathbf{y}_1}{\|\mathbf{x}_2 – (\mathbf{y}_1, \mathbf{x}_2)\mathbf{y}_1\|} \]

このとき、\( \mathbf{x}_2 \) は次のように \( \mathbf{y}_1 \) と \( \mathbf{y}_2 \) を用いて表されます。

\[ \mathbf{x}_2 = (\mathbf{y}_1, \mathbf{x}_2) \mathbf{y}_1 + \|\mathbf{x}_2 – (\mathbf{y}_1, \mathbf{x}_2)\mathbf{y}_1\| \mathbf{y}_2 \]

同様に、3番目のベクトル \( \mathbf{y}_3 \) は次のようになります。

\[ \mathbf{y}_3 = \frac{\mathbf{x}_3 – (\mathbf{y}_1, \mathbf{x}_3)\mathbf{y}_1 – (\mathbf{y}_2, \mathbf{x}_3)\mathbf{y}_2}{\|\mathbf{x}_3 – (\mathbf{y}_1, \mathbf{x}_3)\mathbf{y}_1 – (\mathbf{y}_2, \mathbf{x}_3)\mathbf{y}_2\|} \]

このとき、\( \mathbf{x}_3 \) は次のように \( \mathbf{y}_1 \), \( \mathbf{y}_2 \), \( \mathbf{y}_3 \) を用いて表されます。

\[ \mathbf{x}_3 = (\mathbf{y}_1, \mathbf{x}_3) \mathbf{y}_1 + (\mathbf{y}_2, \mathbf{x}_3) \mathbf{y}_2 + \|\mathbf{x}_3 – (\mathbf{y}_1, \mathbf{x}_3)\mathbf{y}_1 – (\mathbf{y}_2, \mathbf{x}_3)\mathbf{y}_2\| \mathbf{y}_3 \]

\( i \) 番目のベクトル \( \mathbf{y}_i \) は次のようになります。

\[ \mathbf{y}_i = \frac{\mathbf{x}_i – \sum_{k=1}^{i-1} (\mathbf{y}_k, \mathbf{x}_i)\mathbf{y}_k}{\|\mathbf{x}_i – \sum_{k=1}^{i-1} (\mathbf{y}_k, \mathbf{x}_i)\mathbf{y}_k\|} \]

このとき、\( \mathbf{x}_i \) は次のように \( \mathbf{y}_1, \mathbf{y}_2, \dots, \mathbf{y}_i \) を用いて表されます。

\[ \mathbf{x}_i = \sum_{j=1}^{i-1} (\mathbf{y}_j, \mathbf{x}_i) \mathbf{y}_j + \|\mathbf{x}_i – \sum_{k=1}^{i-1} (\mathbf{y}_k, \mathbf{x}_i)\mathbf{y}_k\| \mathbf{y}_i \]

次に、行列 \( Q \) と \( R \) を以下のように定義します。

行列 \( Q \) は、生成した直交ベクトル \( \mathbf{y}_1, \mathbf{y}_2, \dots, \mathbf{y}_n \) を列に持つ行列として定義します。

\[ Q = [\mathbf{y}_1 \ \mathbf{y}_2 \ \dots \ \mathbf{y}_n] \]

行列 \( R \) は、各ベクトル \( \mathbf{x}_i \) が \( \mathbf{y}_j \) の線形結合として表されることを利用して、以下のように定義されます。

\[ R = \begin{bmatrix} \|\mathbf{x}_1\| & (\mathbf{y}_1, \mathbf{x}_2) & \dots & (\mathbf{y}_1, \mathbf{x}_n) \\ 0 & \|\mathbf{x}_2 – (\mathbf{y}_1, \mathbf{x}_2) \mathbf{y}_1\| & \dots & (\mathbf{y}_2, \mathbf{x}_n) \\ 0 & 0 & \ddots & \vdots \\ 0 & 0 & \dots & \|\mathbf{x}_n – \sum_{k=1}^{n-1} (\mathbf{y}_k, \mathbf{x}_n) \mathbf{y}_k\| \end{bmatrix} \]

これを行列形式にまとめると、行列 \( X \) は次のように表されます。

\[ X = QR \]

はるか
はるか
Rがすごいことになってる。
ふゅか
ふゅか
実際は、Qの転置行列とAの積から求められるから、そんな構えなくても大丈夫!

3. QR分解を求める例題

3.1. 例題1(2×2行列のQR分解)

次の \(2 \times 2\) 行列 \(A\) のQR分解を求めなさい。

\[ A = \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} \]

まず、行列 \(A\) の各列を直交化します。

最初の列ベクトル \( \mathbf{a}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix} \)
2つ目の列ベクトル \( \mathbf{a}_2 = \begin{pmatrix} 1 \\ 2 \end{pmatrix} \) とします。

最初のベクトル \( \mathbf{u}_1 \) は \( \mathbf{a}_1 \) そのものになります。

\[ \mathbf{u}_1 = \mathbf{a}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix} \]

次に、2つ目のベクトル \( \mathbf{u}_2 \) を \( \mathbf{a}_2 \) と \( \mathbf{u}_1 \) の線形結合を用いて直交化します。

\[ \mathbf{u}_2 = \mathbf{a}_2 – \frac{\mathbf{u}_1 \cdot \mathbf{a}_2}{\mathbf{u}_1 \cdot \mathbf{u}_1} \mathbf{u}_1 \]

\( \mathbf{u}_1 \) と \( \mathbf{a}_2 \) の内積を計算し、それを \( \mathbf{u}_1 \) の内積で割ります:

\[ \mathbf{u}_1 \cdot \mathbf{a}_2 = 2 \times 1 + 1 \times 2 = 4 \]

\[ \mathbf{u}_1 \cdot \mathbf{u}_1 = 2^2 + 1^2 = 5 \]

したがって、係数は \( \frac{4}{5} \) になります。これに基づき \( \mathbf{u}_2 \) を計算します:

\[ \mathbf{u}_2 = \begin{pmatrix} 1 \\ 2 \end{pmatrix} – \frac{4}{5} \begin{pmatrix} 2 \\ 1 \end{pmatrix} = \begin{pmatrix} \frac{-3}{5} \\ \frac{6}{5} \end{pmatrix} \]

直交ベクトル \( \mathbf{u}_1 \) と \( \mathbf{u}_2 \) を正規化します。

\[ \mathbf{q}_1 = \frac{\mathbf{u}_1}{\|\mathbf{u}_1\|} = \frac{1}{\sqrt{5}} \begin{pmatrix} 2 \\ 1 \end{pmatrix}\]

\[ \mathbf{q}_2 = \frac{\mathbf{u}_2}{\|\mathbf{u}_2\|} = \frac{1}{\sqrt{5}} \begin{pmatrix} -1 \\ 2 \end{pmatrix} \]

これにより、行列\( Q \) は次のようになります。

\[ Q = \begin{pmatrix} \frac{2}{\sqrt{5}} & -\frac{1}{\sqrt{5}} \\ \frac{1}{\sqrt{5}} & \frac{2}{\sqrt{5}} \end{pmatrix} = \begin{pmatrix} \frac{2\sqrt{5}}{5} & -\frac{\sqrt{5}}{5} \\ \frac{\sqrt{5}}{5} & \frac{2\sqrt{5}}{5} \end{pmatrix} \]

次に、直交行列Qの性質を用いて、行列 \( R \) は次のように求められます。

\[ R = Q^T A = \begin{pmatrix} \frac{2\sqrt{5}}{5} & \frac{\sqrt{5}}{5} \\ -\frac{\sqrt{5}}{5} & \frac{2\sqrt{5}}{5} \end{pmatrix} \begin{pmatrix} 2 & 1 \\ 1 & 2 \end{pmatrix} = \begin{pmatrix} \sqrt{5} & \frac{4\sqrt{5}}{5} \\ 0 & \frac{3\sqrt{5}}{5} \end{pmatrix} \]

ここで、$QQ^T=E$となることを利用した。

したがって、QR分解の結果は次のようになります。

\[ A = QR = \begin{pmatrix} \frac{2\sqrt{5}}{5} & -\frac{\sqrt{5}}{5} \\ \frac{\sqrt{5}}{5} & \frac{2\sqrt{5}}{5} \end{pmatrix} \begin{pmatrix} \sqrt{5} & \frac{4\sqrt{5}}{5} \\ 0 & \frac{3\sqrt{5}}{5} \end{pmatrix} \]

はるか
はるか
おー。本当にRが上三角行列になってる。

3.2. 例題2(3×2行列のQR分解)

次の \(3 \times 2\) 行列 \(A\) のQR分解を求めなさい。

\[ A = \begin{pmatrix} 1 & 1 \\ 1 & 0 \\ 0 & 1 \end{pmatrix} \]

まず、行列 \(A\) の各列を直交化します。

最初の列ベクトル \( \mathbf{a}_1 = \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} \)
2つ目の列ベクトル \( \mathbf{a}_2 = \begin{pmatrix} 1 \\ 0 \\ 1 \end{pmatrix} \)

とする。

最初のベクトル \( \mathbf{u}_1 \) は \( \mathbf{a}_1 \) そのものになります。

\[ \mathbf{u}_1 = \mathbf{a}_1 = \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} \]

次に、2つ目のベクトル \( \mathbf{u}_2 \) を \( \mathbf{a}_2 \) と \( \mathbf{u}_1 \) の線形結合を用いて直交化します。

\[ \mathbf{u}_2 = \mathbf{a}_2 – \frac{\mathbf{u}_1 \cdot \mathbf{a}_2}{\mathbf{u}_1 \cdot \mathbf{u}_1} \mathbf{u}_1 \]

\( \mathbf{u}_1 \) と \( \mathbf{a}_2 \) の内積を計算し、それを \( \mathbf{u}_1 \) の内積で割ります:

\[ \mathbf{u}_1 \cdot \mathbf{a}_2 = 1 \times 1 + 1 \times 0 + 0 \times 1 = 1 \]

\[ \mathbf{u}_1 \cdot \mathbf{u}_1 = 1^2 + 1^2 + 0^2 = 2 \]

したがって、係数は \( \frac{1}{2} \) になります。これに基づき \( \mathbf{u}_2 \) を計算します:

\[ \mathbf{u}_2 = \begin{pmatrix} 1 \\ 0 \\ 1 \end{pmatrix} – \frac{1}{2} \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} \frac{1}{2} \\ -\frac{1}{2} \\ 1 \end{pmatrix} \]

直交ベクトル \( \mathbf{u}_1 \) と \( \mathbf{u}_2 \) を正規化します。

\[ \mathbf{q}_1 = \frac{\mathbf{u}_1}{\|\mathbf{u}_1\|} = \frac{1}{\sqrt{2}} \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} \]\[ \mathbf{q}_2 = \frac{\mathbf{u}_2}{\|\mathbf{u}_2\|} = \frac{1}{\sqrt{6}}\begin{pmatrix} 1 \\ -1 \\ 2 \end{pmatrix}\]

これにより、行列\( Q \) は次のようになります。

\[ Q = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{6}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{6}} \\ 0 & \frac{2}{\sqrt{6}} \end{pmatrix} \]

次に、行列Qの性質を用いて、行列 \( R \) は次のように求められます。

\[ R = Q^T A = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} & 0 \\ \frac{1}{\sqrt{6}} & -\frac{1}{\sqrt{6}} & \frac{2}{\sqrt{6}} \end{pmatrix} \begin{pmatrix} 1 & 1 \\ 1 & 0 \\ 0 & 1 \end{pmatrix} = \begin{pmatrix} \sqrt{2} & \frac{1}{\sqrt{2}} \\ 0 & \frac{3}{\sqrt{6}} \end{pmatrix} \]

ここで、$QQ^T=E$となることを利用した。

したがって、QR分解の結果は次のようになります。

\[ A = QR = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{6}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{6}} \\ 0 & \frac{2}{\sqrt{6}} \end{pmatrix} \begin{pmatrix} \sqrt{2} & \frac{1}{\sqrt{2}} \\ 0 & \frac{3}{\sqrt{6}} \end{pmatrix} \]

PR