【Python線形代数】完全正規直交系と直交行列
完全正規直交系
ベクトル空間を張るベクトルの集合を基底とよびました。基底であるための条件は「互いに線形独立である」、「空間を張るメンバーが不足していない」の 2 つでしたが、さらに「互いに直交する」、「メンバーが単位ベクトルである」という2つの条件を付け加えた基底を 完全正規直交系(正規直交基底) とよびます。英語では complete orthonormal system と記述するので、その頭文字をとって CONS と表されることもあります。
たとえば以下の 3 組のベクトルは
# 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
メンバー同士で互いに内積をとると
メンバー自身の内積を計算してみると、
となるので、
完全正規直交系であることは、クロネッカーのデルタ記号
すなわち、各メンバーが自分同士で内積をとる場合は
直交行列
# 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.]]
このように、正規直交基底のベクトルで構成される行列を直交行列とよび、次のように計算してみると常に
となります。一般に
正規直交系
完全正規直交系の「完全」とは「基底であること」を意味しています。この条件を外した「互いに直交しつつ、各々の長さが
不完全直交系のベクトルで構成される行列
このとき、
# 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. ]]
このように、系が不完全であれば行列演算の簡潔性の一部が失われることになります。とはいえ、完全であろうと不完全であろうと、
≫【次の記事】グラムシュミットの直交化法
≫ Pythonで学ぶ線形代数トップページ
コメント