矩阵相关术语
正交矩阵
如果ATA=E(E为单位矩阵),则n阶实矩阵A称为正交矩阵,通常用Q表示。
性质:
1、AT的各行(列)是单位向量且两两正交
2、|A|=1或-1
3、AT = A-1
4、两个正交矩阵的积还是正交矩阵
施密特正交化
施密特正交化是求欧氏空间正交基的一种方法。从欧氏空间任意线性无关的向量组α1,α2,……,αm出发,求得正交向量组β1,β2,……,βm,使由α1,α2,……,αm与向量组β1,β2,……,βm等价,再将正交向量组中每个向量经过单位化,就得到一个标准正交向量组,这种方法称为施密特正交化。
设向量组a1a2a3线性无关,我们先来构造正交向量组β1β2β3,按所要求的条件,β1 是a1 的线性组合,β2 是 a1、a2的线性组合。不妨设
β1=a1,β2=a2 - kβ1,其中数值 的选取应满足>β1 与β2 垂直,即
<β2,β1> = <a2,β1 >-k<β1,β1> = 0,所以可得
k = <a2,β1 >/<β1,β1>
从而可得:
矩阵的QR分解
定义:一个非奇异方阵A,一定存在一个正交矩阵Q和上三角矩阵R(对角线元素都为正数),使得
A = QR
- 证明
把矩阵A按列向量分块,A=[α1,α2,…,αn],则向量组α1,α2,…,αn线性无关。由施密特正交化可得正交向量组
β1 = α1
β2 = α2 - k21β1
… … …
βn = αn - kn,n-1 βn-1 - …- kn,1 β1
其中k(i,j) = (αi, βj)/(βj,βj),上式可改写为:
α1 = β1
α2 = k21β1 + β2
… … …
αn = kn,1 β1 +kn2 β2 … + kn,n-1 βn-1 + βn
于是可得
再对β1,β2,…,βn单位化
则:
令Q = [γ1,γ2,…,γn],是一个单位化的正交矩阵。另R为
即R是正线上三角矩阵,因此A有QR分解为A=QR。
代码实现
import numpy as np
def gram_schmidt(A):
"""Gram-schmidt正交化"""
Q=np.zeros_like(A)
cnt = 0
for a in A.T: #一个a表示一个列向量
u = np.copy(a)
for i in range(0, cnt): #求出β1、β2....
u -= np.dot(np.dot(Q[:, i].T, a), Q[:, i]) # 减去待求向量在以求向量上的投影
e = u / np.linalg.norm(u) # 归一化,整体的矩阵元素平方和,再开根号
Q[:, cnt] = e
cnt += 1
R = np.dot(Q.T, A) #A.T = A^-1
return (Q, R)
A = np.array([[3,14,9],[6,43,3],[6,22,15]],dtype=float)
(Q, R) = gram_schmidt(A)
np.set_printoptions(precision=4, suppress=True)
Q,R
(array([[ 0.3333, -0.1333, 0.9333],
[ 0.6667, 0.7333, -0.1333],
[ 0.6667, -0.6667, -0.3333]]),
array([[ 9., 48., 15.],
[ 0., 15., -9.],
[ 0., 0., 3.]]))