正交基与标准正交基
一个 n n n维空间中任何一组线性无关的向量,都是这个 n n n维空间的一组基。当这组基的向量两两垂直,则称为正交基。而标准正交基只是将正交基又添加了一个条件,模长为1。一个空间可以有无数组基向量,正交基和标准正交基也同样是有无数组的。
正交基的好处在于可以很方便地表示空间中的点,用数学语言表示为,两个向量
u
⃗
\vec{u}
u和
v
⃗
\vec{v}
v的乘积,
u
⃗
⋅
v
⃗
=
u
1
⋅
v
1
+
u
2
⋅
v
2
+
.
.
.
+
u
n
⋅
v
n
=
∣
∣
u
⃗
∣
∣
⋅
∣
∣
v
⃗
∣
∣
⋅
c
o
s
θ
\vec{u}\cdot\vec{v}=u_1\cdot v_1+u_2\cdot v_2+...+u_n\cdot v_n=||\vec{u}||\cdot ||\vec{v}||\cdot cos\theta
u⋅v=u1⋅v1+u2⋅v2+...+un⋅vn=∣∣u∣∣⋅∣∣v∣∣⋅cosθ
当
θ
=
90
°
\theta=90°
θ=90°时,
c
o
s
θ
=
0
cos\theta=0
cosθ=0,相应的
u
⃗
⋅
v
⃗
=
0
\vec{u}\cdot\vec{v}=0
u⋅v=0,称这两个向量相互垂直或相互正交。
正交向量组则是一组向量,任意两个向量都满足正交的关系,则称为正交向量组。正交向量组的一个很好的性质是,正交非零向量组一定线性无关。这一性质的证明并不复杂,
回顾之前的知识,
n
n
n维空间中,任意
n
n
n个线性无关的向量一定是n维空间的基。同理,
n
n
n个非零正交向量一定是
n
n
n维空间的基。
一维投影
一维投影相当于把一个向量投影到另一个向量,可以进一步求取正交基,如下图中两个不共线的向量
u
⃗
\vec{u}
u和
v
⃗
\vec{v}
v(也可以直接理解为二维空间的一组基),向量
v
⃗
\vec{v}
v对
u
⃗
\vec{u}
u做投影得到向量
p
⃗
\vec{p}
p,通过向量
p
⃗
\vec{p}
p可以计算出与向量
u
⃗
\vec{u}
u正交的向量
v
⃗
−
p
⃗
\vec{v}-\vec{p}
v−p 。
知道了
p
⃗
\vec{p}
p的方向和大小就可以得到向量
p
⃗
\vec{p}
p的表示,
求出向量
p
⃗
\vec{p}
p后,进一步求取向量
v
⃗
−
p
⃗
\vec{v}-\vec{p}
v−p 是十分容易的,这就解决了在二维空间中求取一组正交基的问题。随着空间维度的上升,求取的过程会变得复杂,但是求取正交基依旧是能找到特定方法的过程。
高维投影和Gram-Schmidt过程
通过任意维度的一组基构造空间的正交基的算法。
三维空间
以三维向量为例,假设存在一组三维向量,需要求出这三个向量所在空间的正交基,其中两个已经处理得到相互正交的向量
p
1
⃗
\vec{p_1}
p1和
p
2
⃗
\vec{p_2}
p2。此时空间的基为
w
⃗
、
p
1
⃗
和
p
2
⃗
\vec{w}、\vec{p_1}和\vec{p_2}
w、p1和p2,
进一步需要做的就是做
w
⃗
\vec{w}
w向量在
p
1
⃗
和
p
2
⃗
\vec{p_1}和\vec{p_2}
p1和p2构成的空间中的投影
p
⃗
\vec{p}
p,
w
⃗
−
p
⃗
\vec{w}-\vec{p}
w−p的向量就是所要求的正交向量,
问题就转化为如何求取
w
⃗
\vec{w}
w在
p
1
⃗
和
p
2
⃗
\vec{p_1}和\vec{p_2}
p1和p2上的投影
p
⃗
\vec{p}
p,进行如下转换,
依据之前二维空间中的投影计算公式,可以得到
a
⃗
\vec{a}
a和
b
⃗
\vec{b}
b的向量,得到如下公式
三维空间求正交基的整个过程可以看做是先求出相应的二维空间的正交基,进一步求取三维空间正交基。
四维及以上空间
四维以上的空间是无法可视化的,但是与三维空间相似,可以先求取低维度空间的正交基,在其基础上进行高一维度正交基的求取。
给出任何一组
n
n
n维空间的基,正交基的过程都可以通过逐一维度的计算得到。任何一个维度的向量都减去它在低维度空间中已经正交的向量的投影,这一过程就是Gram-Schmidt过程。
实现Gram-Schmidt过程
# -*- coding: utf-8 -*-
from .Vector import Vector
from .Matrix import Matrix
from .LinearSystem import rank
def gram_schmidt_process(basis):
"""
:param basis: 一组基向量
"""
# 下面两行可以视为对传入的向量进行Gauss-Jordan消元法,确保没有零行,即线性无关
matrix = Matrix(basis)
assert rank(matrix) == len(basis)
# 所有互相正交的向量存放在 res这个列表中
res = [basis[0]]
for i in range(1, len(basis)):
# 下面的三行代码是上方加粗语句过程的实现
p = basis[i]
for r in res:
p = p - basis[i].dot(r) / r.dot(r) * r
res.append(p)
return res
if __name__ == "__main__":
basis1 = [Vector([2, 1]), Vector([1, 1])]
res1 = gram_schmidt_process(basis1)
for row in res1:
print(row) # 返回 (2, 1) (-0.2, 0.4)
print(res1[0].dot(res[1])) # 返回0,即二者正交
# 求取标准正交基
res1 = [row / row.norm() for row in res1]
相关话题
将投影与线性系统联系起来,
这实际上是最小二乘法的思路,得到近似解。
标准正交基的性质
空间的基可以排列成一个矩阵,矩阵的每一列就是这组基中的一个基向量。
n n n个 n n n维的标准正交基可以按照相同的方式排列成一个矩阵(方阵),称为标准正交矩阵,表示为 Q Q Q。
- 性质1
Q T ⋅ Q = I Q^T\cdot Q=I QT⋅Q=I
除了主对角线的元素,其余都是相互正交的两个向量的点乘,结果为0。主对角线实际上是标准正交向量的模,为1。 - 性质2
标准正交矩阵是可逆的。
标准正交矩阵的各列都是线性无关的,这与矩阵可逆的等价命题是相同的,回顾矩阵可逆的等价命题,
Q T Q^T QT是 Q Q Q的左逆,则 Q T Q^T QT也一定是 Q Q Q的右逆。即 Q T Q^T QT是Q的逆,所以得到标准正交矩阵的一个重要性质,对于标准正交矩阵而言, Q T = Q − 1 Q^T = Q^{-1} QT=Q−1。
上面的这一重要性质在机器学习中是PCA算法的原理,实际上是将一个高维空间映射到低维空间中,同时也是从低维空间映射回高维空间的过程。