【Python線形代数】完全正規直交系と直交行列
完全正規直交系
ベクトル空間を張るベクトルの集合を基底とよびました。基底であるための条件は「互いに線形独立である」、「空間を張るメンバーが不足していない」の 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 のコードで確認してください:
# python_complete_orthonormal_system # In[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$ を計算すると単位行列となります:
# In[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$ は単位行列とはなりません:
# In[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$ が成り立ちます (直交行列によるノルム不変性)。
≫【次の記事】グラムシュミットの直交化法
≫ Pythonで学ぶ線形代数トップページ
コメント
【ChatGPT講義】完全正規直交系
講師: 皆さん、こんにちは。今日は線型代数の中でも重要な概念である「完全正規直交系」についてお話しします。
生徒A: 完全正規直交系って、初めて聞く言葉ですが、一体何を意味するんですか?
講師: 生徒Aさん、良い質問ですね。完全正規直交系とは、ベクトルの集合が特定の性質を満たすときに使われる言葉です。まずは、ベクトルの直交性と正規性について確認しましょう。
生徒B: ベクトルの直交性って、互いに直交することを意味するんですよね?
講師: その通りです、生徒Bさん。ベクトルの直交性とは、2つのベクトルが互いに直角(直交)をなすことを指します。つまり、ベクトル同士の内積がゼロになるということです。
生徒C: なるほど、直交性はベクトル同士が直角をなすことなんですね。では、正規性とはどういう意味なんですか?
講師: いい質問です、生徒Cさん。正規性とは、ベクトルの大きさ(ノルム)が1であることを指します。つまり、ベクトルの長さが1であるということです。
生徒A: なるほど、直交性と正規性がベクトルにおいて重要な性質だということがわかりました。では、完全正規直交系とはどういう関係があるのでしょうか?
講師: その質問に答えるために、まず基底という概念についてお話ししましょう。ベクトル空間では、ベクトルの組み合わせで全てのベクトルを表現することができます。そして、その組み合わせを行うための基本となるベクトルの集合を基底と呼びます。
生徒B: 基底とは、ベクトルの組み合わせで全てのベクトルを表現するための集合のことですね。
講師: 正解です、生徒Bさん。そして、完全正規直交系は、基底の一種であり、特別な性質を持っています。完全正規直交系では、ベクトルの集合が直交性と正規性を同時に満たしているのです。
生徒C: つまり、完全正規直交系では、ベクトル同士が直角をなすだけでなく、それぞれのベクトルの大きさも1なんですね。
講師: その通りです、生徒Cさん。完全正規直交系は、直交性と正規性の両方を持つため、ベクトル空間の中で特に重要な役割を果たします。この性質を利用することで、ベクトルの分解や表現、さらには行列の対角化など、様々な数学的な操作や解析が行えるのです。
生徒A: 完全正規直交系の性質を利用することで、ベクトルの操作や解析がより簡単になるんですね。とても興味深いです!
講師: そうですね、生徒Aさん。完全正規直交系は線型代数の基礎を支える重要な概念です。数学的な応用だけでなく、物理学や信号処理、画像処理などの様々な分野でも活用されています。