完全正規直交系と直交行列

完全正規直交系と直交行列

完全正規直交系と直交行列

完全正規直交系

 ベクトル空間を張るベクトルの集合を基底とよびました。基底であるための条件は「互いに線型独立である」、「空間を張るメンバーが不足していない」の 2 つでしたが、さらに「互いに直交する」、「メンバーが単位ベクトルである」という 2 つの条件を付け加えた基底を 完全正規直交系 (正規直交基底) とよびます。英語では complete orthonormal system と記述するので、頭文字をとって CONS と表されることもあります。

 たとえば以下の 3 組のベクトルは $\mathbb{R}^3$ を張る基底であり、互いに直交しています。
 
\[\boldsymbol{a}_1=\begin{bmatrix}1\\1\\0\end{bmatrix},
\quad\boldsymbol{a}_2=\begin{bmatrix}-1\\1\\0\end{bmatrix},
\quad\boldsymbol{a}_3=\begin{bmatrix}0\\0\\1\end{bmatrix}
\tag{1}\]
 $\det(\boldsymbol{a}_1,\boldsymbol{a}_2,\boldsymbol{a}_3)\neq 0$ なので、メンバーは互いに線型独立です。
 行列式の計算が面倒な人は Python のコードで確認してください:

# SLA_61-1

import numpy as np
from scipy.linalg import det

# 配列を定義
X = np.array([[1, -1, 0],
              [1,  1, 0],
              [0,  0, 1]])

# 行列式を計算
print(det(X))
2

 メンバー同士で互いに内積をとると $0$ となります:
 
\[\begin{align*}
&\boldsymbol{a}_1^T\boldsymbol{a}_2=0\\[6pt]
&\boldsymbol{a}_2^T\boldsymbol{a}_3=0\\[6pt]
&\boldsymbol{a}_3^T\boldsymbol{a}_1=0\end{align*}\tag{2}\]
 
 メンバー自身の内積を計算してみると、
 
\[\boldsymbol{a}_1^T\boldsymbol{a}_1=2,\quad
\boldsymbol{a}_2^T\boldsymbol{a}_2=2,\quad
\boldsymbol{a}_3^T\boldsymbol{a}_3=1\tag{3}\]
となるので、$\boldsymbol{a}_1$ と $\boldsymbol{a}_2$ の大きさは $\sqrt{2}$、$\boldsymbol{a}_3$ の大きさは $1$ であることがわかります。$\boldsymbol{a}_1$ と $\boldsymbol{a}_2$ をそれぞれ $\sqrt{2}$ で割ると、すべてのメンバーの大きさを $1$ に揃えることができます。
 
\[\boldsymbol{q}_1=\frac{1}{\sqrt{2}}
\begin{bmatrix}1\\1\\0\end{bmatrix},
\quad\boldsymbol{q}_2=\frac{1}{\sqrt{2}}
\begin{bmatrix}-1\\1\\0\end{bmatrix},
\quad\boldsymbol{q}_3=\begin{bmatrix}0\\0\\1\end{bmatrix}\tag{4}\]
 $\{\boldsymbol{q}_1,\ \boldsymbol{q}_2,\ \boldsymbol{q}_3\}$ は 完全正規直交系 (正規直交基底) です。

 完全正規直交系であることは、クロネッカーのデルタ記号 $\delta_{ij}$ を使って次のように表せます。
 
\[\boldsymbol{q}_i^T\boldsymbol{q}_j
=\delta_{ij}=\begin{cases}
0 & (i\neq j)\\[6pt]
1 & (i=j)\end{cases}\tag{5}\]
 すなわち、各メンバーが自分同士で内積をとる場合は $1$ となり、他のメンバーとの間で内積を計算した場合は $0$ となります。
 

直交行列

 $\{\boldsymbol{q}_1,\ \boldsymbol{q}_2,\ \boldsymbol{q}_3\}$ のメンバーを横に並べて行列をつくってみます。
 
\[Q=\begin{bmatrix}
\boldsymbol{q}_1&\boldsymbol{q}_2&\boldsymbol{q}_3
\end{bmatrix}
=\begin{bmatrix}
\cfrac{1}{\sqrt{2}}&-\cfrac{1}{\sqrt{2}}&0\\
\cfrac{1}{\sqrt{2}}&\cfrac{1}{\sqrt{2}}&0\\
0&0&1\end{bmatrix}\tag{6}\]
 $Q^TQ$ と $QQ^T$ を計算すると単位行列となります:

# SLA_61-2

x = np.sqrt(2)/2

# 直交行列
Q = np.array([[ x, x, 0],
              [-x, x, 0],
              [ 0, 0, 1]])

print(Q.T @ Q)
print(Q @ Q.T)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

 このように、正規直交基底のベクトルで構成される行列を直交行列とよび、次のように計算してみると常に $Q^TQ=I$ が成り立つことがわかります。
 
\[Q^TQ=\begin{bmatrix}
\boldsymbol{q}_1^T\\
\boldsymbol{q}_2^T\\
\boldsymbol{q}_3^T\end{bmatrix}
\begin{bmatrix}
\boldsymbol{q}_1&\boldsymbol{q}_2&\boldsymbol{q}_3
\end{bmatrix}
=\begin{bmatrix}
\boldsymbol{q}_1^T \boldsymbol{q}_1
&\boldsymbol{q}_1^T \boldsymbol{q}_2
&\boldsymbol{q}_1^T \boldsymbol{q}_3\\
\boldsymbol{q}_2^T \boldsymbol{q}_1
&\boldsymbol{q}_2^T \boldsymbol{q}_2
&\boldsymbol{q}_2^T \boldsymbol{q}_3\\
\boldsymbol{q}_3^T \boldsymbol{q}_1
&\boldsymbol{q}_3^T \boldsymbol{q}_2
&\boldsymbol{q}_3^T \boldsymbol{q}_3
\end{bmatrix}\tag{7}\]
 $\boldsymbol{q}_i\boldsymbol{q}_j=\delta_{ij}$ より、対角成分だけが残るので
 
\[Q^TQ=\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}=I\tag{8}\]
となります。一般に $\mathbb{R}^n$ を張る基底のメンバー数は $n$ なので、直交行列 $Q$ は正方行列であり、$Q^TQ=I$ が成り立つことから、$Q^T$ は $Q$ の転置行列であると同時に逆行列であることもわかります。したがって、$QQ^T=I$ も成り立ちます。
 

正規直交系

 完全正規直交系の「完全」とは「基底であること」を意味しています。この条件を外した「互いに直交しつつ、各々の長さが $1$ であるけれど、空間を張るメンバーが揃っているとは限らない」ベクトル集合を 正規直交系 とよびます。細かいことですが、メンバーが揃っていても揃っていなくても正規直交系です。つまり、完全正規直交系は正規直交系の部分集合です。揃っていないことを明示する場合は「不完全直交系」とよびます。

 不完全直交系のベクトルで構成される行列 $Q$ は矩形行列となり、$Q^TQ=I$ は成り立ちますが、$QQ^T=I$ は成立しません。つまり、$Q^T$ は $Q$ の逆行列ではありません (このような行列を「左逆行列」とよぶこともあります)。

 たとえば、基底 (4) から $\boldsymbol{q}_2$ を外して、行列 $Q$ を以下のように定義します。
 
\[Q=\begin{bmatrix}
\boldsymbol{q}_1&\boldsymbol{q}_3
\end{bmatrix}
=\begin{bmatrix}
\cfrac{1}{\sqrt{2}}&0\\
\cfrac{1}{\sqrt{2}}&0\\
0&1\end{bmatrix}\tag{9}\]
 このとき、$Q^TQ$ は単位行列ですが、$QQ^T$ は単位行列とはなりません:

# SLA_61-3

x = np.sqrt(2)/2

# 不完全直交行列
Q = np.array([[x, 0],
              [x, 0],
              [0, 1]])

print(Q.T @ Q)
print(Q @ Q.T)
[[1. 0.]
 [0. 1.]]

[[0.5 0.5 0. ]
 [0.5 0.5 0. ]
 [0.  0.  1. ]]

 このように、系が不完全であれば行列演算の簡潔性の一部が失われることになります。とはいえ、完全であろうと不完全であろうと、$Q^TQ=I$ が成り立つので、直交行列 $Q$ による線型変換はベクトルの内積を保持します:
 
\[(Q\boldsymbol{x})^T(Q\boldsymbol{y})
=\boldsymbol{x}^TQ^TQ\boldsymbol{y}
=\boldsymbol{x}^TI\boldsymbol{y}
=\boldsymbol{x}^T\boldsymbol{y}\tag{10}\]
 $\boldsymbol{y}=\boldsymbol{x}$ であるときは、$\parallel Q\boldsymbol{x}\parallel=\parallel\boldsymbol{x}\parallel$ が成り立ちます (直交行列によるノルム不変性)。