本节的两个目标就是为什么和怎么做(why and how)。首先是知道为什么正交性很好:因为它们的点积为零; A T A A^TA ATA 是对角矩阵;在求 x ^ \boldsymbol{\hat x} x^ 和 p = A x ^ \boldsymbol p=A\boldsymbol{\hat x} p=Ax^ 时也会很简单。第二个目的标是构建正交向量,通过格拉姆-施密特(Gram-Schmidt)正交化的方法选择原始基向量的组合生成直角。原始基向量就是 A A A 的列,它可能不是正交的。标准正交基向量将会是新矩阵 Q Q Q 的列。
一、标准正交矩阵 Q
一组基包含可张成空间的无关向量,这些基向量可能是以任意角度相交的(不能是
0
°
0°
0° 和
180
°
180°
180°)。我们所看到的坐标轴,它们都是垂直的,而正交可以简化图形也能大大的减少计算。
一组向量
q
1
,
q
2
,
⋯
,
q
n
\boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n
q1,q2,⋯,qn,当它们的点积
q
i
⋅
q
j
=
0
\boldsymbol q_i\cdot\boldsymbol q_j=0
qi⋅qj=0 时,它们的正交的。更确切的说应该是只要
i
≠
j
i\neq j
i=j 时,
q
i
T
q
j
=
0
\boldsymbol q_i^T\boldsymbol q_j=0
qiTqj=0。更进一步,我们将每个向量除以它的长度,这组向量就变成了正交单位向量,它们的长度都为
1
1
1(标准),这组基就称为标准正交基(orthonormal)。
定义 \kern 5pt 向量 q 1 , q 2 , ⋯ , q n \boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n q1,q2,⋯,qn 标准正交,如果: q i T q j = { 0 , i ≠ j ( 正交 向量 ) 1 , i = j ( 单位 向量 : ∣ ∣ q i ∣ ∣ = 1 ) \boldsymbol q_i^T\boldsymbol q_j=\left\{\begin{array}{l}0,\kern 10pti\neq j\kern 5pt(\pmb{正交}向量)\\1,\kern 10pti=j\kern 5pt(\pmb{单位}向量:||\boldsymbol q_i||=1)\end{array}\right. qiTqj={0,i=j(正交向量)1,i=j(单位向量:∣∣qi∣∣=1)标准正交列的矩阵用指定字母 Q Q Q 表示。
矩阵 Q Q Q 很容易处理,因为 Q T Q = I Q^TQ=I QTQ=I。用矩阵语言来说就是列 q 1 , q 2 , ⋯ , q n \boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n q1,q2,⋯,qn 是标准正交的, Q Q Q 不一定要是方阵。
有标准正交列的矩阵 Q Q Q 满足 Q T Q = I \color{blue}{Q^TQ=I} QTQ=I: Q T Q = [ − − q 1 T − − − − q 2 T − − ⋮ − − q n T − − ] [ ∣ ∣ ∣ q 1 q 2 ⋯ q n ∣ ∣ ∣ ] = [ 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ 1 ] = I ( 4.4.1 ) {\color{blue}{Q^TQ}}=\begin{bmatrix}--\,\boldsymbol q_1^T--\\--\,\boldsymbol q_2^T--\\\vdots\\--\,\boldsymbol q^T_n--\end{bmatrix}\begin{bmatrix}|&|&&|\\\boldsymbol q_1&\boldsymbol q_2&\cdots&\boldsymbol q_n\\|&|&&|\end{bmatrix}=\begin{bmatrix}1&0&\cdots&0\\0&1&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\0&0&\cdots&1\end{bmatrix}={\color{blue}I}\kern 10pt(4.4.1) QTQ= −−q1T−−−−q2T−−⋮−−qnT−− ∣q1∣∣q2∣⋯∣qn∣ = 10⋮001⋮0⋯⋯⋱⋯00⋮1 =I(4.4.1)
Q
T
Q^T
QT 的第
i
i
i 行乘
Q
Q
Q 的第
j
j
j 列,点积是
q
i
T
q
j
\boldsymbol q_i^T\boldsymbol q_j
qiTqj,非对角线(
i
≠
j
i\neq j
i=j)上的元素因为正交性它们的点积都为零;对角线(
i
=
j
i=j
i=j)上的元素是
1
1
1,因为单位向量有
q
i
T
q
i
=
∣
∣
q
i
∣
∣
2
=
1
\boldsymbol q_i^T\boldsymbol q_i=||\boldsymbol q_i||^2=1
qiTqi=∣∣qi∣∣2=1。通常
Q
Q
Q 是矩形(
m
>
n
m>n
m>n),有时也有
m
=
n
m=n
m=n。
当
Q
是方阵时,
Q
T
Q
=
I
意味着
Q
T
=
Q
−
1
:转置
=
逆
\color{blue}当\,Q\,是方阵时,Q^TQ=I\,意味着\,Q^T=Q^{-1}:转置=逆
当Q是方阵时,QTQ=I意味着QT=Q−1:转置=逆如果列仅仅是正交但不是单位矩阵,点积仍然得到对角矩阵(不是单位矩阵)。对角矩阵和单位矩阵
I
I
I 基本上一样,重要的是正交性 —— 单位化很简单。
重复:尽管
Q
Q
Q 是个矩形矩阵,仍然有
Q
T
Q
=
I
Q^TQ=I
QTQ=I,这种情况下
Q
T
Q^T
QT 只是左逆矩阵。对于方阵来说,也有
Q
T
Q
=
I
Q^TQ=I
QTQ=I,所以
Q
T
Q^T
QT 是
Q
Q
Q 的双边逆矩阵。方阵
Q
Q
Q 的行像它的列一样都是正交的,此时逆矩阵就是转置矩阵。方阵的情况下我们称
Q
Q
Q 是正交矩阵。(只有当
Q
Q
Q 是方阵时我们才称为正交矩阵:orthogonal matrix。)
下面是正交矩阵的三个例子:旋转(rotation)、置换(permutation)和反射(reflection)。最快的检验方法就是检查
Q
T
Q
=
I
Q^TQ=I
QTQ=I。
【例1】(旋转) Q Q Q 将平面的任意向量旋转角度 θ \theta θ:
Q = [ cos θ − sin θ sin θ cos θ ] 和 Q T = Q − 1 = [ cos θ sin θ − sin θ cos θ ] Q=\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\cos\theta\end{bmatrix}\kern 5pt和\kern 5ptQ^T=Q^{-1}=\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta&\cos\theta\end{bmatrix} Q=[cosθsinθ−sinθcosθ]和QT=Q−1=[cosθ−sinθsinθcosθ]
Q
Q
Q 的列是正交的(可以通过它们的点积进行验证),它们也是单位向量,因为
sin
2
θ
+
cos
2
θ
=
1
\sin^2\theta+\cos^2\theta=1
sin2θ+cos2θ=1。这些列是平面
R
2
\pmb{\textrm R}^2
R2 的一组标准正交基。
Q
Q
Q 将标准基向量
i
\boldsymbol i
i 和
j
\boldsymbol j
j 旋转
θ
\theta
θ 角(如 Figure 4.10a);
Q
−
1
Q^{-1}
Q−1 将向量旋转
−
θ
-\theta
−θ 角旋转回来,它与
Q
T
Q^T
QT 是一样的,因为
cos
(
−
θ
)
=
cos
θ
\cos(-\theta)=\cos\theta
cos(−θ)=cosθ,
sin
(
−
θ
)
=
−
sin
θ
\sin(-\theta)=-\sin\theta
sin(−θ)=−sinθ。我们有
Q
T
Q
=
I
Q^TQ=I
QTQ=I 且
Q
Q
T
=
I
QQ^T=I
QQT=I。
【例2】(置换)这些矩阵改变将向量分量的顺序变为 ( y , z , x ) (y,z,x) (y,z,x) 和 ( y , x ) (y,x) (y,x): [ 0 1 0 0 0 1 1 0 0 ] [ x y z ] = [ y z x ] , [ 0 1 1 0 ] [ x y ] = [ y x ] \begin{bmatrix}0&1&0\\0&0&1\\1&0&0\end{bmatrix}\begin{bmatrix}x\\y\\z\end{bmatrix}=\begin{bmatrix}y\\z\\x\end{bmatrix},\kern 10pt\begin{bmatrix}0&1\\1&0\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}y\\x\end{bmatrix} 001100010 xyz = yzx ,[0110][xy]=[yx] Q Q Q 的每一列的都是单位向量(它们的长度很明显都是 1 1 1),且都是正交的( 1 1 1 是在不同的位置)。置换矩阵的逆矩阵就是它的转置: Q − 1 = Q T Q^{-1}=Q^T Q−1=QT。逆矩阵将向量的分量又变回原先的顺序: 逆 = 转置 : [ 0 0 1 1 0 0 0 1 0 ] [ y z x ] = [ x y z ] , [ 0 1 1 0 ] [ y x ] = [ x y ] \pmb{逆=转置}:\kern 10pt\begin{bmatrix}0&0&1\\1&0&0\\0&1&0\end{bmatrix}\begin{bmatrix}y\\z\\x\end{bmatrix}=\begin{bmatrix}x\\y\\z\end{bmatrix},\kern 5pt\begin{bmatrix}0&1\\1&0\end{bmatrix}\begin{bmatrix}y\\x\end{bmatrix}=\begin{bmatrix}x\\y\end{bmatrix} 逆=转置: 010001100 yzx = xyz ,[0110][yx]=[xy]
每个置换矩阵都是一个正交矩阵。
【例3】(反射)如果 u \boldsymbol u u 是任意的单位向量,令 Q = I − 2 u u T Q=I-2\boldsymbol {uu}^T Q=I−2uuT。注意 u u T \boldsymbol{uu}^T uuT 是一个矩阵,而 u T u \boldsymbol u^T\boldsymbol u uTu 是一个数字,且 ∣ ∣ u ∣ ∣ 2 = 1 ||\boldsymbol u||^2=1 ∣∣u∣∣2=1。则 Q T Q^T QT 和 Q − 1 Q^{-1} Q−1 都等于 Q Q Q: Q T = I − 2 u u T = Q 且 Q T Q = I − 4 u u T + 4 u u T u u T = I ( 4.4.2 ) {\color{blue}Q^T=I-2\boldsymbol{uu}^T=Q}\kern 5pt且\kern 5ptQ^TQ=I-4\boldsymbol{uu}^T+4\boldsymbol{uu}^T\boldsymbol{uu}^T=I\kern 10pt(4.4.2) QT=I−2uuT=Q且QTQ=I−4uuT+4uuTuuT=I(4.4.2)反射矩阵 I − 2 u u T I-2\boldsymbol{uu}^T I−2uuT 是对称且正交的矩阵,将它平方可以得到单位矩阵: Q 2 = Q T Q = I Q^2=Q^TQ=I Q2=QTQ=I。通过镜子反射两次会回到原始状态,就像 ( − 1 ) 2 = 1 (-1)^2=1 (−1)2=1。注意方程(4.4.2) 4 u u T u u T 4\boldsymbol{uu}^T\boldsymbol{uu}^T 4uuTuuT 中的 u T u = 1 \boldsymbol u^T\boldsymbol u=1 uTu=1。
图中选择的方向是
u
=
(
−
1
2
,
1
2
)
\boldsymbol u=(\displaystyle-\frac{1}{\sqrt2},\frac{1}{\sqrt2})
u=(−21,21)。计算
2
u
u
T
2\boldsymbol{uu}^T
2uuT(列乘行)然后将其从
I
I
I 中减去就可以得到在方向
u
\boldsymbol u
u 的反射矩阵
Q
Q
Q:
反射
:
Q
=
I
−
2
[
1
/
2
−
1
/
2
−
1
/
2
1
/
2
]
=
[
0
1
1
0
]
,
[
0
1
1
0
]
[
x
y
]
=
[
y
x
]
\pmb{反射}:Q=I-2\begin{bmatrix}1/2&-1/{2}\\-1/2&1/2\end{bmatrix}=\begin{bmatrix}0&1\\1&0\end{bmatrix},\begin{bmatrix}0&1\\1&0\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}y\\x\end{bmatrix}
反射:Q=I−2[1/2−1/2−1/21/2]=[0110],[0110][xy]=[yx]它会使得
(
x
,
y
)
(x,y)
(x,y) 变为
(
y
,
x
)
(y,x)
(y,x),但是像
(
3
,
3
)
(3,3)
(3,3) 这样的向量不会改变,这是因为它就在反射线上。
旋转会保留每个向量的长度,反射和置换也一样。任何正交矩阵
Q
Q
Q 乘上向量 —— 向量的长度和角度不会改变。(此处角度指的是相对角度,例如
v
\boldsymbol v
v 和
w
\boldsymbol w
w。)
证明:
∣
∣
Q
x
∣
∣
2
=
∣
∣
x
∣
∣
2
||Q\boldsymbol x||^2=||\boldsymbol x||^2
∣∣Qx∣∣2=∣∣x∣∣2,因为
(
Q
x
)
T
(
Q
x
)
=
x
T
Q
T
Q
x
=
x
T
I
x
=
x
T
x
(Q\boldsymbol x)^T(Q\boldsymbol x)=\boldsymbol x^TQ^TQ\boldsymbol x=\boldsymbol x^TI\boldsymbol x=\boldsymbol x^T\boldsymbol x
(Qx)T(Qx)=xTQTQx=xTIx=xTx。
如果 Q Q Q 有标准正交列 Q T Q = I Q^TQ=I QTQ=I,那么它会保持长度不变: Q x 和 x 有相同的长度 对任意的向量 x 有: ∣ ∣ Q x ∣ ∣ = ∣ ∣ x ∣ ∣ ( 4.4.3 ) Q\boldsymbol x\,和\,\boldsymbol x\,有相同的长度\kern 10pt{\color{blue}对任意的向量\,\boldsymbol x\,有:||Q\boldsymbol x||=||\boldsymbol x||}\kern 15pt(4.4.3) Qx和x有相同的长度对任意的向量x有:∣∣Qx∣∣=∣∣x∣∣(4.4.3) Q Q Q 也会维持点积不变: ( Q x ) T ( Q y ) = x T Q T Q y = x T y {\color{blue}(Q\boldsymbol x)^T(Q\boldsymbol y)=\boldsymbol x^TQ^TQ\boldsymbol y=\boldsymbol x^T\boldsymbol y} (Qx)T(Qy)=xTQTQy=xTy。仅使用了 Q T Q = I Q^TQ=I QTQ=I。
二、使用标准正交基投影:Q 代替 A
正交矩阵非常适合计算 —— 当向量长度固定时,数字的变化不会太大,稳定的计算机代码尽可能的使用
Q
Q
Q。
投影到一个子空间的所有公式都和
A
T
A
A^TA
ATA 有关,
A
T
A
A^TA
ATA 的元素是基向量
a
1
,
a
2
,
⋯
,
a
n
\boldsymbol a_1,\boldsymbol a_2,\cdots,\boldsymbol a_n
a1,a2,⋯,an 的点积
a
i
T
a
j
\boldsymbol a^T_i\boldsymbol a_j
aiTaj。
假设基向量是标准正交的,向量
a
\boldsymbol a
a 将变为
q
\boldsymbol q
q,则
A
T
A
A^TA
ATA 可以简化为
Q
T
Q
=
I
Q^TQ=I
QTQ=I。看看改善后的
x
^
\boldsymbol{\hat x}
x^、
p
\boldsymbol p
p 和
P
P
P。下面使用空行来替代
Q
T
Q
Q^TQ
QTQ,它是一个单位矩阵:
_
_
x
^
=
Q
T
b
,
p
=
Q
x
^
,
P
=
Q
_
_
Q
T
(
4.4.4
)
\_\_\boldsymbol{\hat x}=Q^T\boldsymbol b,\kern 10pt\boldsymbol p=Q\boldsymbol{\hat x},\kern 10ptP=Q\_\_Q^T\kern 15pt(4.4.4)
__x^=QTb,p=Qx^,P=Q__QT(4.4.4)
Q
x
=
b
的最小二乘解是
x
^
=
Q
T
b
。投影矩阵是
Q
Q
T
。
\color{blue}Q\boldsymbol x=\boldsymbol b\,的最小二乘解是\,\boldsymbol{\hat x}=Q^T\boldsymbol b。投影矩阵是\,QQ^T。
Qx=b的最小二乘解是x^=QTb。投影矩阵是QQT。这里不需要求矩阵的逆,这是标准正交基的关键所在。最优的
x
^
=
Q
T
b
\boldsymbol{\hat x}=Q^T\boldsymbol b
x^=QTb 只有
q
1
,
q
2
,
⋯
,
q
n
\boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n
q1,q2,⋯,qn 与
b
\boldsymbol b
b 的点积,我们有一维的投影!“耦合矩阵(coupling matrix)” 或 “关联矩阵(correlation matrix)”
A
T
A
A^TA
ATA 现在是
Q
T
Q
=
I
Q^TQ=I
QTQ=I,不存在耦合了。当
A
A
A 是
Q
Q
Q 时,因为有标准正交列,则此时
p
=
Q
x
^
=
Q
Q
T
b
\boldsymbol p=Q\boldsymbol{\hat x}=QQ^T\boldsymbol b
p=Qx^=QQTb:
在 q ′ s 的投影 p = [ ∣ ∣ ∣ q 1 q 2 ⋯ q n ∣ ∣ ∣ ] [ q 1 T b q 2 T b ⋮ q n T b ] = q 1 ( q 1 T b ) + q 2 ( q 2 T b ) + ⋯ + q n ( q n T b ) ( 4.4.5 ) 在\,\boldsymbol q's 的投影\kern 20pt{\color{blue}\boldsymbol p}=\begin{bmatrix}|&|&&|\\\boldsymbol q_1&\boldsymbol q_2&\cdots&\boldsymbol q_n\\|&|&&|\end{bmatrix}\begin{bmatrix}\boldsymbol q_1^T\boldsymbol b\\\boldsymbol q_2^T\boldsymbol b\\\vdots\\\boldsymbol q^T_n\boldsymbol b\end{bmatrix}={\color{blue}\boldsymbol q_1(\boldsymbol q_1^T\boldsymbol b)+\boldsymbol q_2(\boldsymbol q^T_2\boldsymbol b)+\cdots+\boldsymbol q_n(\boldsymbol q^T_n\boldsymbol b)}\kern 15pt(4.4.5) 在q′s的投影p= ∣q1∣∣q2∣⋯∣qn∣ q1Tbq2Tb⋮qnTb =q1(q1Tb)+q2(q2Tb)+⋯+qn(qnTb)(4.4.5)
重要情况: 当
Q
Q
Q 是方阵
m
=
n
m=n
m=n 时,子空间是整个空间,则因为
Q
T
=
Q
−
1
Q^T=Q^{-1}
QT=Q−1,所以
x
^
=
Q
T
b
\boldsymbol{\hat x}=Q^T\boldsymbol b
x^=QTb 就与
x
=
Q
−
1
b
\boldsymbol x=Q^{-1}\boldsymbol b
x=Q−1b 是一样的,这个解是确切的唯一解!
b
\boldsymbol b
b 在整个空间的投影就是
b
\boldsymbol b
b 自己。这种情况下,
p
=
b
\boldsymbol p=\boldsymbol b
p=b 且
P
=
Q
Q
T
=
I
P=QQ^T=I
P=QQT=I。
你可能会认为在整个空间的投影不值一提,但是当
p
=
b
\boldsymbol p=\boldsymbol b
p=b 时,我们的公式可以将
b
\boldsymbol b
b 从它的一维投影中聚集起来。如果
q
1
,
q
2
,
⋯
,
q
n
\boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n
q1,q2,⋯,qn 是整个空间的标准正交基,那么
Q
Q
Q 是一个方阵,任意
b
=
Q
Q
T
b
\boldsymbol b=QQ^T\boldsymbol b
b=QQTb 都是它沿着
q
′
s
\boldsymbol q's
q′s 的分量的和:
b = q 1 ( q 1 T b ) + q 2 ( q 2 T b ) + ⋯ + q n ( q n T b ) ( 4.4.6 ) \boldsymbol b=\boldsymbol q_1(\boldsymbol q^T_1\boldsymbol b)+\boldsymbol q_2(\boldsymbol q^T_2\boldsymbol b)+\cdots+\boldsymbol q_n(\boldsymbol q^T_n\boldsymbol b)\kern 25pt(4.4.6) b=q1(q1Tb)+q2(q2Tb)+⋯+qn(qnTb)(4.4.6)
变换: Q Q T = I QQ^T=I QQT=I 是傅里叶级数的基础,也是其他所有应用数学中伟大 “变换” 的基础。它将 b \boldsymbol b b 或函数 f ( x ) f(x) f(x) 分解成垂直的片段,然后用 ( 4.4.6 ) (4.4.6) (4.4.6) 将它们加起来,逆变换可以将 b \boldsymbol b b 或 f ( x ) f(x) f(x) 恢复。
【例4】正交矩阵 Q Q Q 的列是标准正交向量 q 1 , q 2 , q 3 \boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3 q1,q2,q3: m = n = 3 Q = 1 3 [ − 1 2 2 2 − 1 2 2 2 − 1 ] 有 Q T Q = Q Q T = I m=n=3\kern 15ptQ=\frac{1}{3}\begin{bmatrix}-1&\kern 7pt2&\kern 7pt2\\\kern 7pt2&-1&\kern 7pt2\\\kern 7pt2&\kern 7pt2&-1\end{bmatrix}有\kern 5ptQ^TQ=QQ^T=I m=n=3Q=31 −1222−1222−1 有QTQ=QQT=I b = ( 0 , 0 , 1 ) \boldsymbol b=(0,0,1) b=(0,0,1) 在 q 1 , q 2 , q 3 \boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3 q1,q2,q3 上的投影分别是 p 1 , p 2 , p 3 \boldsymbol p_1,\boldsymbol p_2,\boldsymbol p_3 p1,p2,p3: q 1 ( q 1 T b ) = 2 3 q 1 , q 2 ( q 2 T b ) = 2 3 q 2 , q 3 ( q 3 T b ) = − 1 3 q 3 \boldsymbol q_1(\boldsymbol q_1^T\boldsymbol b)=\frac{2}{3}\boldsymbol q_1,\kern 5pt\boldsymbol q_2(\boldsymbol q^T_2\boldsymbol b)=\frac{2}{3}\boldsymbol q_2,\kern 5pt\boldsymbol q_3(\boldsymbol q_3^T\boldsymbol b)=-\frac{1}{3}\boldsymbol q_3 q1(q1Tb)=32q1,q2(q2Tb)=32q2,q3(q3Tb)=−31q3前两项的和是 b \boldsymbol b b 在 q 1 \boldsymbol q_1 q1 和 q 2 \boldsymbol q_2 q2 平面上的投影,所有项的和是 b \boldsymbol b b 在整个空间的投影 —— p 1 + p 2 + p 3 = b \boldsymbol p_1+\boldsymbol p_2+\boldsymbol p_3=\boldsymbol b p1+p2+p3=b 就是它本身: 重构 b b = p 1 + p 2 + p 3 2 3 q 1 + 2 3 q 2 − 1 3 q 3 = 1 9 [ − 2 + 4 − 2 4 − 2 − 2 4 + 4 + 1 ] = [ 0 0 1 ] = b \begin{array}{l}重构\,\boldsymbol b\\\boldsymbol b=\boldsymbol p_1+\boldsymbol p_2+\boldsymbol p_3\end{array}\kern 10pt\frac{2}{3}\boldsymbol q_1+\frac{2}{3}\boldsymbol q_2-\frac{1}{3}\boldsymbol q_3=\frac{1}{9}\begin{bmatrix}-2+4-2\\4-2-2\\4+4+1\end{bmatrix}=\begin{bmatrix}0\\0\\1\end{bmatrix}=\boldsymbol b 重构bb=p1+p2+p332q1+32q2−31q3=91 −2+4−24−2−24+4+1 = 001 =b
三、格拉姆-施密特正交化步骤
投影与最小二乘都含有
A
T
A
A^TA
ATA,当这个矩阵是
Q
T
Q
=
I
Q^TQ=I
QTQ=I 时,我们也就不需要再求逆矩阵了,一维的投影不是耦合的,最优的
x
^
\boldsymbol{\hat x}
x^ 就是
Q
T
b
Q^T\boldsymbol b
QTb(就是
n
n
n 个分开的点积)。为了实现这个目标,我们需要向量是 “标准正交向量”。下面介绍格拉姆-施密特方法创造标准正交向量。
我们从三个无关的向量
a
,
b
,
c
\boldsymbol a,\boldsymbol b,\boldsymbol c
a,b,c 开始,我们的目的是创造三个正交向量
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C,然后我们分别除以它们自己的长度(通常最后做比较容易)以单位化。这样就可以得到三个标准正交向量
q
1
=
A
∣
∣
A
∣
∣
,
q
2
=
B
∣
∣
B
∣
∣
,
q
3
=
C
∣
∣
C
∣
∣
\boldsymbol q_1=\displaystyle\frac{\boldsymbol A}{||\boldsymbol A||},\boldsymbol q_2=\frac{\boldsymbol B}{||\boldsymbol B||},\boldsymbol q_3=\frac{\boldsymbol C}{||\boldsymbol C||}
q1=∣∣A∣∣A,q2=∣∣B∣∣B,q3=∣∣C∣∣C。
格拉姆-施密特: 首先让
A
=
a
\boldsymbol A=\boldsymbol a
A=a,第一个就选择第一个方向,第二个方向
B
\boldsymbol B
B 要与
A
\boldsymbol A
A 垂直。
b
\boldsymbol b
b 减去它在
A
\boldsymbol A
A 方向上的投影,会保留垂直的部分,这部分就是正交向量
B
\boldsymbol B
B:
格拉姆
−
施密特第一步
B
=
b
−
A
T
b
A
T
A
A
(
4.4.7
)
\pmb{格拉姆-施密特第一步}\kern 15pt{\color{blue}\boldsymbol B=\boldsymbol b-\frac{\boldsymbol A^T\boldsymbol b}{\boldsymbol A^T\boldsymbol A}\boldsymbol A}\kern 20pt(4.4.7)
格拉姆−施密特第一步B=b−ATAATbA(4.4.7)如 Figure 4.11,
A
\boldsymbol A
A 和
B
\boldsymbol B
B 是正交的,方程(4.4.7)左乘
A
T
\boldsymbol A^T
AT 可以验证
A
T
B
=
A
T
b
−
A
T
b
=
0
\boldsymbol A^T\boldsymbol B=\boldsymbol A^T\boldsymbol b-\boldsymbol A^T\boldsymbol b=0
ATB=ATb−ATb=0。向量
B
\boldsymbol B
B 就是我们称之为误差向量的
e
\boldsymbol e
e,它垂直于
A
\boldsymbol A
A。注意方程(4.4.7)中的
B
\boldsymbol B
B 不为零(否则
a
\boldsymbol a
a 和
b
\boldsymbol b
b 就是相关的了)。
A
\boldsymbol A
A 和
b
\boldsymbol b
b 的方向现在定好了。
第三个方向从
c
\boldsymbol c
c 开始,它不是
A
\boldsymbol A
A 和
B
\boldsymbol B
B 的组合(因为
c
\boldsymbol c
c 不是
a
\boldsymbol a
a 和
b
\boldsymbol b
b 的组合)。大多数情况下
c
\boldsymbol c
c 不会和
A
\boldsymbol A
A 与
B
\boldsymbol B
B 垂直的,所以
c
\boldsymbol c
c 减去它在两个方向上的分量就可以得到垂直的方向
C
\boldsymbol C
C:
格拉姆
−
施密特的下一步
C
=
c
−
A
T
c
A
T
A
A
−
B
T
c
B
T
B
B
(
4.4.8
)
\pmb{格拉姆-施密特的下一步}\kern 15pt{\color{blue}\boldsymbol C=\boldsymbol c-\frac{\boldsymbol A^T\boldsymbol c}{\boldsymbol A^T\boldsymbol A}\boldsymbol A-\frac{\boldsymbol B^T\boldsymbol c}{\boldsymbol B^T\boldsymbol B}\boldsymbol B}\kern 15pt(4.4.8)
格拉姆−施密特的下一步C=c−ATAATcA−BTBBTcB(4.4.8)这个就是格拉姆-施密特方法的思路。从每个新向量中减去它在已经定好的方向的投影。这个思想在每个步骤中都重复使用。如果我们有第四个向量
d
\boldsymbol d
d,我们要让它减去它在
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C 这三个方向上的投影得到
D
\boldsymbol D
D。
最后,或者是在得道每项以后,将这些正交向量
A
,
B
,
C
,
D
\boldsymbol A,\boldsymbol B,\boldsymbol C,\boldsymbol D
A,B,C,D 分别除以它们的长度。最终得到的就是标准正交向量
q
1
,
q
2
,
q
3
,
q
4
\boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3,\boldsymbol q_4
q1,q2,q3,q4。
格拉姆-施密特的例题:假设有
3
3
3 个无关的非正交向量
a
,
b
,
c
\boldsymbol a,\boldsymbol b,\boldsymbol c
a,b,c 是:
a
=
[
1
−
1
0
]
,
b
=
[
2
0
−
2
]
,
c
=
[
3
−
3
3
]
\boldsymbol a=\begin{bmatrix}\kern 7pt\pmb1\\\pmb{-1}\\\kern 7pt\pmb0\end{bmatrix},\kern 5pt\boldsymbol b=\begin{bmatrix}\kern 7pt2\\\kern 7pt0\\-2\end{bmatrix},\kern 5pt\boldsymbol c=\begin{bmatrix}\kern 7pt3\\-3\\\kern 7pt3\end{bmatrix}
a=
1−10
,b=
20−2
,c=
3−33
则
A
=
a
\boldsymbol A=\boldsymbol a
A=a,
A
T
A
=
2
\boldsymbol A^T\boldsymbol A=2
ATA=2,
A
T
b
=
2
\boldsymbol A^T\boldsymbol b=2
ATb=2,
b
\boldsymbol b
b 减去它在
A
\boldsymbol A
A 上的投影
p
\boldsymbol p
p:
第一步
B
=
b
−
A
T
b
A
T
A
A
=
b
−
2
2
A
=
[
1
1
−
2
]
\pmb{第一步}\kern 20pt\boldsymbol B=\boldsymbol b-\frac{\boldsymbol A^T\boldsymbol b}{\boldsymbol A^T\boldsymbol A}\boldsymbol A=\boldsymbol b-\frac{2}{2}\boldsymbol A=\begin{bmatrix}\kern 7pt\pmb1\\\kern 7pt\pmb1\\\pmb{-2}\end{bmatrix}
第一步B=b−ATAATbA=b−22A=
11−2
检验:
A
T
B
=
0
\boldsymbol A^T\boldsymbol B=0
ATB=0 符合要求。下面用
c
\boldsymbol c
c 减去它在
A
\boldsymbol A
A 和
B
\boldsymbol B
B 方向上的投影得到
C
\boldsymbol C
C:
下一步
C
=
c
−
A
T
c
A
T
A
A
−
B
T
c
B
T
B
B
=
c
−
6
2
A
+
6
6
B
=
[
1
1
1
]
\pmb{下一步}\kern 20pt\boldsymbol C=\boldsymbol c-\frac{\boldsymbol A^T\boldsymbol c}{\boldsymbol A^T\boldsymbol A}\boldsymbol A-\frac{\boldsymbol B^T\boldsymbol c}{\boldsymbol B^T\boldsymbol B}\boldsymbol B=\boldsymbol c-\frac{6}{2}\boldsymbol A+\frac{6}{6}\boldsymbol B=\begin{bmatrix}\pmb1\\\pmb1\\\pmb1\end{bmatrix}
下一步C=c−ATAATcA−BTBBTcB=c−26A+66B=
111
检验:
C
=
(
1
,
1
,
1
)
\boldsymbol C=(1,1,1)
C=(1,1,1) 与
A
\boldsymbol A
A 和
B
\boldsymbol B
B 都垂直。最后,将
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C 都转化为单位向量(长度为
1
1
1 的标准正交向量)。
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C 的长度分别为
2
,
6
\sqrt2,\sqrt6
2,6 和
3
\sqrt3
3,分别除以它们的长度的单一组标准正交基:
q
1
=
1
2
[
1
−
1
0
]
,
q
2
=
1
6
[
1
1
−
2
]
,
q
3
=
1
3
[
1
1
1
]
\boldsymbol q_1=\frac{1}{\sqrt2}\begin{bmatrix}\kern 7pt1\\-1\\\kern 7pt0\end{bmatrix},\boldsymbol q_2=\frac{1}{\sqrt6}\begin{bmatrix}\kern 7pt1\\\kern 7pt1\\-2\end{bmatrix},\boldsymbol q_3=\frac{1}{\sqrt3}\begin{bmatrix}1\\1\\1\end{bmatrix}
q1=21
1−10
,q2=61
11−2
,q3=31
111
通常
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C 都含有分数,大部分的
q
1
,
q
2
,
q
3
\boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3
q1,q2,q3 都会有平方根。
四、A = QR 分解
我们从矩阵
A
A
A 开始,它的列是
a
,
b
,
c
\boldsymbol a,\boldsymbol b,\boldsymbol c
a,b,c;以矩阵
Q
Q
Q 结束,
Q
Q
Q 的列是
q
1
,
q
2
,
q
3
\boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3
q1,q2,q3。那么这些矩阵有什么关系呢?因为向量
a
,
b
,
c
\boldsymbol a,\boldsymbol b,\boldsymbol c
a,b,c 是
q
′
s
\boldsymbol q's
q′s 的组合(反之也是),那么肯定会有一个矩阵将
A
A
A 和
Q
Q
Q 联系起来,这个矩阵就是
A
=
Q
R
A=QR
A=QR 中的三角矩阵
R
R
R。
第一步是
q
1
=
a
∣
∣
a
∣
∣
\boldsymbol q_1=\displaystyle\frac{\boldsymbol a}{||\boldsymbol a||}
q1=∣∣a∣∣a(没有其它向量参与),第二步就是方程(4.4.7),
b
\boldsymbol b
b 是
A
\boldsymbol A
A 和
B
\boldsymbol B
B 的组合,在这一步
C
\boldsymbol C
C 和
q
3
\boldsymbol q_3
q3 没有参与。后面的向量不参与前面的运算是格拉姆-施密特的关键点:
- 向量 a \boldsymbol a a 和 A \boldsymbol A A 和 q 1 \boldsymbol q_1 q1 都沿着同一条直线。
- 向量 a , b \boldsymbol a,\boldsymbol b a,b 和 A , B \boldsymbol A,\boldsymbol B A,B 和 q 1 , q 2 \boldsymbol q_1,\boldsymbol q_2 q1,q2 都在同一平面。
- 向量 a , b , c \boldsymbol a,\boldsymbol b,\boldsymbol c a,b,c 和 A , B , C \boldsymbol A,\boldsymbol B,\boldsymbol C A,B,C 和 q 1 , q 2 , q 3 \boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3 q1,q2,q3 都在同一个子空间( 3 3 3 维的)。
每一步 a 1 , a 2 , ⋯ , a k \boldsymbol a_1,\boldsymbol a_2,\cdots,\boldsymbol a_k a1,a2,⋯,ak 是 q 1 , q 2 , ⋯ , q k \boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_k q1,q2,⋯,qk 的组合,后面的 q ′ s \boldsymbol q's q′s 都没有参与。这里的关联矩阵 R R R 是三角矩阵,有 A = Q R A=QR A=QR:
[ a b c ] = [ q 1 q 2 q 3 ] [ q 1 T a q 1 T b q 1 T c q 2 T b q 2 T c q 3 T c ] 或 A = Q R ( 4.4.9 ) \begin{bmatrix}\\\boldsymbol a&\boldsymbol b&\boldsymbol c\\\,\end{bmatrix}=\begin{bmatrix}\\\boldsymbol q_1&\boldsymbol q_2&\boldsymbol q_3\\\,\end{bmatrix}\begin{bmatrix}\boldsymbol q_1^T\boldsymbol a&\boldsymbol q_1^T\boldsymbol b&\boldsymbol q_1^T\boldsymbol c\\&\boldsymbol q_2^T\boldsymbol b&\boldsymbol q_2^T\boldsymbol c\\&&\boldsymbol q_3^T\boldsymbol c\end{bmatrix}或\kern 5pt{\color{blue}A=QR}\kern 16pt(4.4.9) abc = q1q2q3 q1Taq1Tbq2Tbq1Tcq2Tcq3Tc 或A=QR(4.4.9)
A = Q R A=QR A=QR 是格拉姆-施密特的概括,上式左乘 Q T Q^T QT 得到 R = Q T A R=Q^TA R=QTA.
(格拉姆-施密特) 从无关的向量 a 1 , a 2 , ⋯ , a n \boldsymbol a_1,\boldsymbol a_2,\cdots,\boldsymbol a_n a1,a2,⋯,an 开始,格拉姆-施密特构造标准正交向量 q 1 , q 2 , ⋯ , q n \boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n q1,q2,⋯,qn。这些列构成的矩阵满足 A = Q R A=QR A=QR,则 R = Q T A R=Q^TA R=QTA 是上三角矩阵,因为后面的 q ′ s \boldsymbol q's q′s 与前面的 a ′ s \boldsymbol a's a′s 正交。
下面的例子就是原始的向量
a
′
s
\boldsymbol a's
a′s 和最终的向量
q
′
s
\boldsymbol q's
q′s。
R
=
Q
T
A
R=Q^TA
R=QTA 的
i
,
j
i,j
i,j 元素是
Q
T
Q^T
QT 的第
i
i
i 行乘
A
A
A 的第
j
j
j 列,
R
R
R 中的元素是点积
q
i
T
a
j
\boldsymbol q_i^T\boldsymbol a_j
qiTaj,有
A
=
Q
R
A=QR
A=QR:
A
=
[
1
2
3
−
1
0
−
3
0
−
2
3
]
=
[
1
/
2
1
/
6
1
/
3
−
1
/
2
1
/
6
1
/
3
0
−
2
/
6
1
/
3
]
[
2
2
18
0
6
−
6
0
0
3
]
=
Q
R
A=\begin{bmatrix}\kern 7pt1&\kern 7pt2&\kern 7pt3\\-1&\kern 7pt0&-3\\\kern 7pt0&-2&\kern 7pt3\end{bmatrix}=\begin{bmatrix}\kern 7pt1/\sqrt2&\kern 7pt1/\sqrt6&1/\sqrt3\\-1/\sqrt2&\kern 7pt1/\sqrt6&1/\sqrt3\\0&-2/\sqrt6&1/\sqrt3\end{bmatrix}\begin{bmatrix}\pmb{\sqrt2}&\sqrt2&\kern 7pt\sqrt{18}\\\pmb0&\pmb{\sqrt6}&-\sqrt6\\\pmb0&\pmb0&\kern 7pt\pmb{\sqrt3}\end{bmatrix}=QR
A=
1−1020−23−33
=
1/2−1/201/61/6−2/61/31/31/3
20026018−63
=QR仔细看一下
Q
Q
Q 和
R
R
R,
R
R
R 的对角线元素
2
,
6
,
3
\sqrt2,\sqrt6,\sqrt3
2,6,3 是
A
,
B
,
C
\boldsymbol A,\boldsymbol B,\boldsymbol C
A,B,C 的长度,
Q
Q
Q 的列是标准正交的。由于存在平方根,
Q
R
QR
QR 可能看起来比
L
U
LU
LU 要难些,但是这两种分解都是线性代数计算的绝对中心。
任意的有线性无关列的
m
×
n
m\times n
m×n 矩阵都可以分解成
A
=
Q
R
A=QR
A=QR,
m
×
n
m\times n
m×n 的矩阵
Q
Q
Q 有标准正交列,方阵
R
R
R 是上三角矩阵,它的对角线都是正的。我们需要记住为什么这对最小二乘很有用:
A
T
A
=
(
Q
R
)
T
Q
R
=
R
T
Q
T
Q
R
=
R
T
R
A^TA=(QR)^TQR=R^TQ^TQR=R^TR
ATA=(QR)TQR=RTQTQR=RTR。最小二乘方程
A
T
A
x
^
=
A
T
b
A^TA\boldsymbol{\hat x}=A^T\boldsymbol b
ATAx^=ATb 可以简化为
R
T
R
x
^
=
R
T
Q
T
b
R^TR\boldsymbol{\hat x}=R^TQ^T\boldsymbol b
RTRx^=RTQTb,最终得到
R
x
^
=
Q
T
b
R\boldsymbol{\hat x}=Q^T\boldsymbol b
Rx^=QTb:这很好。
最小二乘 R T R x ^ = R T Q T b 或 R x ^ = Q T b 或 x ^ = R − 1 Q T b ( 4.4.10 ) \pmb{最小二乘}\kern 20ptR^TR\boldsymbol{\hat x}=R^TQ^T\boldsymbol b\kern 5pt或\kern 5ptR\boldsymbol{\hat x}=Q^T\boldsymbol b\kern 5pt或\kern5pt{\color{blue}\boldsymbol{\hat x}=R^{-1}Q^T\boldsymbol b}\kern 15pt(4.4.10) 最小二乘RTRx^=RTQTb或Rx^=QTb或x^=R−1QTb(4.4.10)
我们不求解
A
x
=
b
A\boldsymbol x=\boldsymbol b
Ax=b,这个是不可能的,我们通过回代求解
R
x
^
=
Q
T
b
R\boldsymbol{\hat x}=Q^T\boldsymbol b
Rx^=QTb —— 这个很快。格拉姆-施密特程序的实际计算成本是
m
n
2
mn^2
mn2 次乘法,我们需要构造正交矩阵
Q
Q
Q 和上三角矩阵
R
R
R 得到
A
=
Q
R
A=QR
A=QR。
下面是修正格拉姆-施密特的 MATLAB 代码,它从
j
=
1
,
j
=
2
j=1,j=2
j=1,j=2, 一直到
j
=
n
j=n
j=n 执行方程 (4.4.11)。重要的是第
4
−
5
4-5
4−5 行,从
v
=
a
j
\boldsymbol v=\boldsymbol a_j
v=aj 减去它在每个
q
i
\boldsymbol q_i
qi 方向上的投影,这里
i
<
j
i<j
i<j。最后一行代码是标准化向量
v
\boldsymbol v
v(除以
r
i
i
=
∣
∣
v
∣
∣
r_{ii}=||\boldsymbol v||
rii=∣∣v∣∣)得到单位向量
q
j
\boldsymbol q_j
qj:
r
k
j
=
∑
i
=
1
m
q
i
k
v
i
j
v
i
j
=
v
i
j
−
q
i
k
r
k
j
r
j
j
=
(
∑
i
=
1
m
v
i
j
2
)
1
/
2
q
i
j
=
v
i
j
r
j
j
(
4.4.11
)
\begin{array}{l}r_{kj}=\displaystyle\sum^m_{i=1}q_{ik}v_{ij}\\v_{ij}=v_{ij}-q_{ik}r_{kj}\\r_{jj}=(\displaystyle\sum_{i=1}^mv^2_{ij})^{1/2}\\q_{ij}=\displaystyle\frac{v_{ij}}{r_{jj}}\end{array}\kern 25pt(4.4.11)
rkj=i=1∑mqikvijvij=vij−qikrkjrjj=(i=1∑mvij2)1/2qij=rjjvij(4.4.11)
r
k
j
r_{kj}
rkj 就是
A
=
Q
R
A=QR
A=QR 分解中
Q
Q
Q 的第
(
k
,
j
)
(k,j)
(k,j)元素,就是
q
k
T
a
j
\boldsymbol q_k^T\boldsymbol a_j
qkTaj;
v
i
j
−
q
i
k
r
k
j
v_{ij} -q_{ik}r_{kj}
vij−qikrkj 是每次减去在
q
k
q_{k}
qk 上的投影,
k
k
k 从
1
1
1 到
j
−
1
j-1
j−1。
从
a
,
b
,
c
\boldsymbol a,\boldsymbol b,\boldsymbol c
a,b,c 开始,这段代码会构造出
q
1
\boldsymbol q_1
q1,然后是
B
,
q
2
\boldsymbol B, \boldsymbol q_2
B,q2,再然后是
C
,
q
3
\boldsymbol C,\boldsymbol q_3
C,q3:
q
1
=
a
1
/
∣
∣
a
1
∣
∣
B
=
a
2
−
(
q
1
T
a
2
)
q
1
q
2
=
B
/
∣
∣
B
∣
∣
C
∗
=
a
3
−
(
q
1
T
a
3
)
q
1
C
=
C
∗
−
(
q
2
T
C
∗
)
q
2
q
3
=
C
/
∣
∣
C
∣
∣
\begin{array}{ll}\boldsymbol q_1=\boldsymbol a_1/||\boldsymbol a_1||&\boldsymbol B=\boldsymbol a_2-(\boldsymbol q_1^T\boldsymbol a_2)\boldsymbol q_1&\boldsymbol q_2=\boldsymbol B/||\boldsymbol B||\\\boldsymbol{C^*} = \boldsymbol a_3-(\boldsymbol q_1^T\boldsymbol a_3)\boldsymbol q_1&\boldsymbol C=\boldsymbol {C^*}-(\boldsymbol q_2^T\boldsymbol{C^*})\boldsymbol q_2&\boldsymbol q_3=\boldsymbol C/||\boldsymbol C||\end{array}
q1=a1/∣∣a1∣∣C∗=a3−(q1Ta3)q1B=a2−(q1Ta2)q1C=C∗−(q2TC∗)q2q2=B/∣∣B∣∣q3=C/∣∣C∣∣ 方程(4.4.11)一次减去一个投影,如
C
∗
\boldsymbol{C^*}
C∗ 和
C
\boldsymbol C
C,减去在
q
1
\boldsymbol q_1
q1 上的投影得到
C
∗
\boldsymbol {C^*}
C∗,然后再用
C
∗
\boldsymbol{C^*}
C∗ 减去在
q
2
\boldsymbol q_2
q2 上的投影得到
C
\boldsymbol C
C。这项改变称为 “修正的格拉姆-施密特”。这套代码的数值计算要比方程(4.4.8)稳定,方程(4.4.8)是一次性减去所有的投影。
for j = 1:n % 修正的格拉姆-施密特
v = A(:, j); % v 从原始的矩阵 A 的第 j 列开始
for i = 1:j-1 % Q 的第 1 列 q_1 到 j-1 列 q_{j-1} 已经设置完成(j=1时该循环不执行)
R(i, j) = Q(:, i)' * v; % 计算 R_{ij} = {q_i}^T*(a_j) 就是 {q_i}^T*v
v = v - R(i, j) * Q(:, i); % 减去投影 ({q_i}^T*v)q_i
end % v 现在与所有的 q_1,q_2,...,q_{j-1} 垂直
R(j, j) = norm(v); % 对角线元素 R_{jj} 是 v 的长度
Q(:, j) = v/R(j, j); % 除以 v 的长度得到下一个 q_j
end % for j = 1:n 这个循环生成所有的 q_j
下图是
n
=
3
n=3
n=3 时的运行结果,矩阵
A
A
A 如代码所示:
要恢复
A
A
A 的第
j
j
j 列,我们要反着执行上述代码,从最后一步到中间步骤:
R
(
j
,
j
)
q
j
=
(
v
减去它的投影
)
=
(
A
的列
j
)
−
∑
i
=
1
j
−
1
R
(
i
,
j
)
q
i
(
4.4.12
)
R(j,j)\boldsymbol q_j=(\boldsymbol v\,减去它的投影)=(A\,的列\,j)-\sum_{i=1}^{j-1}R(i,j)\boldsymbol q_i\kern 12pt(4.4.12)
R(j,j)qj=(v减去它的投影)=(A的列j)−i=1∑j−1R(i,j)qi(4.4.12)将累加和移到左边,则列
j
j
j 可以由
Q
R
=
A
QR=A
QR=A 得到。
好的软件,如 LAPACK,用好的系统上,如 MATLAB、Julia 和 Python,它们不会使用这个格拉姆-施密特代码。现在有更好的方法,“豪斯霍尔德反射(Householder reflections)” 作用在
A
A
A 上得到上三角矩阵
R
R
R,它用同样的方法每次处理一列,就像消元法得到
L
U
LU
LU 中的
U
U
U 同样的方法。
反射矩阵
I
−
2
u
u
T
I-2\boldsymbol{uu}^T
I−2uuT 是数值线性代数的内容,如果
A
A
A 是三角矩阵,我们甚至可以简化成
2
×
2
2\times2
2×2 的旋转矩阵,结果总是
A
=
Q
R
A=QR
A=QR,MATLAB 正交化
A
A
A 的指令是
[
Q
,
R
]
=
qr
(
A
)
[Q,R]=\textrm{qr}(A)
[Q,R]=qr(A)。格拉姆-施密特是一个很容易理解的程序,但是反射和旋转可以得到更好的
Q
Q
Q。
五、主要内容总结
- 如果标准正交向量 q 1 , q 2 , ⋯ , q n \boldsymbol q_1,\boldsymbol q_2,\cdots,\boldsymbol q_n q1,q2,⋯,qn 是 Q Q Q 的列,则 q i T q j = 0 , q i T q i = 1 \boldsymbol q_i^T\boldsymbol q_j=0,\boldsymbol q_i^T\boldsymbol q_i=1 qiTqj=0,qiTqi=1,转换成矩阵乘法就是 Q T Q = I Q^TQ=I QTQ=I。
- 如果 Q Q Q 是方阵(正交矩阵)则 Q T = Q − 1 Q^T=Q^{-1} QT=Q−1:转置 = 逆。
- Q x Q\boldsymbol x Qx 的长度等于 x \boldsymbol x x 的长度: ∣ ∣ Q x ∣ ∣ = ∣ ∣ x ∣ ∣ ||Q\boldsymbol x||=||\boldsymbol x|| ∣∣Qx∣∣=∣∣x∣∣。
- 投影到 Q Q Q 列空间的投影矩阵是 P = Q Q T P=QQ^T P=QQT, Q Q Q 由 q ′ s \boldsymbol q's q′s 生成。
- 如果 Q Q Q 是方阵,则 P = Q Q T = I P=QQ^T=I P=QQT=I,每个 b = q 1 ( q 1 T b ) + q 2 ( q 2 T b ) + ⋯ + q n ( q n T b ) \boldsymbol b=\boldsymbol q_1(\boldsymbol q_1^T\boldsymbol b)+\boldsymbol q_2(\boldsymbol q_2^T\boldsymbol b)+\cdots+\boldsymbol q_n(\boldsymbol q_n^T\boldsymbol b) b=q1(q1Tb)+q2(q2Tb)+⋯+qn(qnTb)。
- 格拉姆-施密特从无关向量 a , b , c \boldsymbol a,\boldsymbol b,\boldsymbol c a,b,c 生成标准正交向量 q 1 , q 2 , q 3 \boldsymbol q_1,\boldsymbol q_2,\boldsymbol q_3 q1,q2,q3。用矩阵形式就是分解 A = Q R = ( 正交的 Q ) ( 上三角 R ) A=QR=(正交的\,Q)(上三角\,R) A=QR=(正交的Q)(上三角R)。
六、例题
【例5】二外增加两个元素都是
1
1
1 或
−
1
-1
−1 的列,使得这个
4
×
4
4\times4
4×4 的 “哈达玛矩阵(Hadamard matrix)” 的列都正交。如何将
H
4
H_4
H4 变为正交矩阵
Q
4
Q_4
Q4?
H
2
=
[
1
1
1
−
1
]
H
4
=
[
1
1
x
x
1
−
1
x
x
1
1
x
x
1
−
1
x
x
]
Q
4
=
[
]
H_2=\begin{bmatrix}1&\kern 7pt1\\1&-1\end{bmatrix}\kern 10ptH_4=\begin{bmatrix}1&\kern 7pt1&x&x\\1&-1&x&x\\1&\kern 7pt1&x&x\\1&-1&x&x\end{bmatrix}\kern 15ptQ_4=\begin{bmatrix}&&&\\&&&\\&&&\\&&&\end{bmatrix}
H2=[111−1]H4=
11111−11−1xxxxxxxx
Q4=
分块矩阵
H
8
=
[
H
4
H
4
H
4
−
H
4
]
H_8=\begin{bmatrix}H_4&\kern 7ptH_4\\H_4&-H_4\end{bmatrix}
H8=[H4H4H4−H4] 是下一个元素都是
1
1
1 或
−
1
-1
−1 的哈达玛矩阵,乘积
H
8
T
H
8
H_8^TH_8
H8TH8 是什么?
b
=
(
6
,
0
,
0
,
2
)
\boldsymbol b=(6,0,0,2)
b=(6,0,0,2) 在
H
4
H_4
H4 第一列的投影是
p
1
=
(
2
,
2
,
2
,
2
)
\boldsymbol p_1=(2,2,2,2)
p1=(2,2,2,2),在第二列的投影是
p
2
=
(
1
,
−
1
,
1
,
−
1
)
\boldsymbol p_2=(1,-1,1,-1)
p2=(1,−1,1,−1),那么
b
\boldsymbol b
b 在由前两列所生成的
2
2
2 维空间的投影
p
1
,
2
\boldsymbol p_{1,2}
p1,2 是什么?
解:
H
4
H_4
H4 可以由
H
2
H_2
H2 得到,和
H
8
H_8
H8 由
H
4
H_4
H4 得到一样:
H
4
=
[
H
2
H
2
H
2
−
H
2
]
=
[
1
1
1
1
1
−
1
1
−
1
1
1
−
1
−
1
1
−
1
−
1
1
]
有正交列
H_4=\begin{bmatrix}H_2&\kern 7ptH_2\\H_2&-H_2\end{bmatrix}=\begin{bmatrix}1&\kern 7pt1&\kern 7pt1&\kern 7pt1\\1&-1&\kern 7pt1&-1\\1&\kern 7pt1&-1&-1\\1&-1&-1&\kern 7pt1\end{bmatrix}有正交列
H4=[H2H2H2−H2]=
11111−11−111−1−11−1−11
有正交列则
Q
4
=
H
4
/
2
Q_4=H_4/2
Q4=H4/2 有标准正交列,除以列的长度以单位化。
5
×
5
5\times5
5×5 的哈达玛矩阵是不存在的,因为列的点积会有
5
5
5 个
1
1
1 或
−
1
-1
−1,它们的和不可能等于零。
H
8
H_8
H8 正交列的长度是
8
\sqrt8
8。
H
8
T
H
8
=
[
H
4
T
H
4
T
H
4
T
−
H
4
T
]
[
H
4
H
4
H
4
−
H
4
]
=
[
2
H
4
T
H
4
0
0
2
H
4
T
H
4
]
=
[
8
I
0
0
8
I
]
,
Q
8
=
H
8
8
H_8^TH_8=\begin{bmatrix}H_4^T&\kern 7ptH_4^T\\H_4^T&-H_4^T\end{bmatrix}\begin{bmatrix}H_4&\kern 7ptH_4\\H_4&-H_4\end{bmatrix}=\begin{bmatrix}2H_4^TH_4&0\\0&2H_4^TH_4\end{bmatrix}=\begin{bmatrix}8I&0\\0&8I\end{bmatrix},\kern 10ptQ_8=\frac{H_8}{\sqrt8}
H8TH8=[H4TH4TH4T−H4T][H4H4H4−H4]=[2H4TH4002H4TH4]=[8I008I],Q8=8H8在平面上的投影等于在两个正交直线上的投影之和
p
1
,
2
=
p
1
+
p
2
=
(
3
,
1
,
3
,
1
)
\boldsymbol p_{1,2}=\boldsymbol p_1+\boldsymbol p_2=(3,1,3,1)
p1,2=p1+p2=(3,1,3,1)。
【例6】正交列的关键是什么?
答:
A
T
A
A^TA
ATA 是对角矩阵,很容易求逆。我们可以将向量投影到正交列上,然后将它们相加,轴是正交的。
【例7】对 A = eye(4)-diag([1 1 1], -1) 进行 QR 分解,让后按比例放大 Q 的列,得到整数列。
解:
A = eye(4) - diag([1 1 1], -1) % diag(v, k) 创建对角矩阵,将向量 v 的元素放在第 k 条对角线上,k<0 在主对角线下
[Q, R] = qr(A) % 对 A 进行 QR 分解,满足 A = QR,Q 是正交矩阵,R 是上三角矩阵
Q
Q
Q 是一个正交矩阵,即
Q
=
[
−
2
/
2
−
6
/
6
−
3
/
6
1
/
2
2
/
2
−
6
/
6
−
3
/
6
1
/
2
0
6
/
3
−
3
/
6
1
/
2
0
0
3
/
2
1
/
2
]
Q=\begin{bmatrix}-\sqrt2/2&-\sqrt6/6&-\sqrt3/6&1/2\\\kern 7pt\sqrt2/2&-\sqrt6/6&-\sqrt3/6&1/2\\0&\kern 7pt\sqrt6/3&-\sqrt3/6&1/2\\0&0&\kern 7pt\sqrt3/2&1/2\end{bmatrix}
Q=
−2/22/200−6/6−6/66/30−3/6−3/6−3/63/21/21/21/21/2
将
Q
Q
Q 按比例放大到整数列,则可得
[
1
1
1
1
−
1
1
1
1
0
−
2
1
1
0
0
−
3
1
]
\begin{bmatrix}\kern 7pt1&\kern 7pt1&\kern 7pt1&1\\-1&\kern 7pt1&\kern 7pt1&1\\\kern 7pt0&-2&\kern 7pt1&1\\\kern 7pt0&\kern 7pt0&-3&1\end{bmatrix}
1−10011−20111−31111