4.4 标准正交基和格拉姆-施密特正交化
本节的两个目标就是为什么和怎么做(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*vv = v - R(i, j) * Q(:, i); % 减去投影 ({q_i}^T*v)q_iend % 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 是对角矩阵,很容易求逆。我们可以将向量投影到正交列上,然后将它们相加,轴是正交的。
相关文章:

4.4 标准正交基和格拉姆-施密特正交化
本节的两个目标就是为什么和怎么做(why and how)。首先是知道为什么正交性很好:因为它们的点积为零; A T A A^TA ATA 是对角矩阵;在求 x ^ \boldsymbol{\hat x} x^ 和 p A x ^ \boldsymbol pA\boldsymbol{\hat x} pAx^ 时也会很简单。第二…...
spring事务的8种失效的场景,7种传播行为
Spring事务大部分都是通过AOP实现的,所以事务失效的场景大部分都是因为AOP失效,AOP基于动态代理实现的 1.方法没有被public修饰 原因:Spring会为方法创建代理、AOP添加事务通知前提条件是该方法时public的。 2.类没有被Spring容器所托管 …...

进程的虚拟内存地址(C++程序的内存分区)
严谨的说法: 一个C、C程序实际就是一个进程,那么C的内存分区,实际上就是一个进程的内存分区,这样的话就可以分为两个大模块,从上往下,也就是0地址一直往下,假如是x86的32位Linux系统,…...

英特尔移除超线程与AMD多线程性能对比
#### 英特尔Lunar Lake架构取消超线程 在英特尔宣布Lunar Lake架构时,一个令人惊讶的消息是下一代轻薄优化架构将移除Hyper-Threading(超线程,简称SMT)。而AMD最新的Zen 5/Zen5C多线程基准测试结果显示,该特性依然为A…...

定期自动巡检,及时发现机房运维管理中的潜在问题
随着信息化技术的迅猛发展,机房作为企业数据处理与存储的核心场所,其运维管理的复杂性和挑战性也与日俱增。为确保机房设备的稳定运行和业务的连续性,运维团队必须定期进行全面的巡检。然而,传统的手工巡检方式不仅效率低下&#…...
八股文(一)
1. 为什么不使用本地缓存,而使用Redis? Redis相比于本地缓存(如JVM中的缓存)有以下几个显著优势: 高性能与低延迟:Redis是一个基于内存的数据库,其读写性能非常高,通常可以达到几万…...
灵茶八题 - 子数组 ^w^
灵茶八题 - 子数组 w 题目描述 给你一个长为 n n n 的数组 a a a,输出它的所有连续子数组的异或和的异或和。 例如 a [ 1 , 3 ] a[1,3] a[1,3] 有三个连续子数组 [ 1 ] , [ 3 ] , [ 1 , 3 ] [1],[3],[1,3] [1],[3],[1,3],异或和分别为 1 , 3 , …...

git clone private repo
Create personal access token Clone repo $ git clone https://<user_name>:<personal_access_tokens>github.com/<user_name>/<repo_name>.git...

vue3+ts+pinia+vant-项目搭建
1.pnpm介绍 npm和pnpm都是JavaScript的包管理工具,用于自动化安装、配置、更新和卸载npm包依赖。 pnpm节省了大量的磁盘空间并提高了安装速度:使用一个内容寻址的文件存储方式,如果多个项目使用相同的包版本,pnpm会存储单个副本…...

自动化测试概念篇
目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中: 自动洒水机&am…...
Mojo值的生命周期(Life of a value)详解
到目前为止,我们已经解释了 Mojo 如何允许您使用 Mojo 的所有权模型构建内存安全的高性能代码而无需手动管理内存。但是,Mojo 是为 系统编程而设计的,这通常需要对自定义数据类型进行手动内存管理。因此,Mojo 允许您根据需要执行此操作。需要明确的是,Mojo 没有引用计数器…...

java对接kimi详细说明,附完整项目
需求: 使用java封装kimi接口为http接口,并把调用kimi时的传参和返回数据,保存到mysql数据库中 自己记录一下,以做备忘。 具体步骤如下: 1.申请apiKey 访问:Moonshot AI - 开放平台使用手机号手机号验证…...

鸿蒙媒体开发【基于AVCodec能力的视频编解码】音频和视频
基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…...

django集成pytest进行自动化单元测试实战
文章目录 一、引入pytest相关的包二、配置pytest1、将django的配置区分测试环境、开发环境和生产环境2、配置pytest 三、编写测试用例1、业务测试2、接口测试 四、进行测试 在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试…...

48天笔试训练错题——day40
目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回…...

LabVIEW在DCS中的优势
DCS(Distributed Control System,分布式控制系统)是一种用于工业过程控制的自动化系统。它将控制任务分散到多个控制单元中,通过网络连接和协调这些单元来实现对整个过程的监控和控制。DCS通常用于大型工业设施,如化工…...

英特尔:从硅谷创业到全球科技巨头
在科技行业,英特尔不仅是一个品牌,更是一种精神的象征。自1968年成立以来,英特尔经历了从初创企业到全球半导体产业领导者的华丽转变,其发展历程是科技创新与市场战略完美结合的典范。本文将深入探讨英特尔的发展历程,…...

生物计算与纳米技术:交汇前沿的科学领域
在当今科技迅猛发展的时代,生物计算和纳米技术作为前沿科技领域的两个重要方向,正在逐渐融合并带来深远的影响。生物计算涉及使用生物系统进行计算和数据存储,而纳米技术则关注制造极小尺度的电子器件和材料科学。本文将深入探讨这两个领域的…...
C#中栈和队列
在C#中,Stack和Queue是两种不同的集合类型,它们用于实现后进先出(LIFO)和先进先出(FIFO)的数据结构。 Stack(堆栈) Stack是一个后进先出的集合,这意味着最后一个添加到堆…...
技战法丨攻防演练防御——纵深、联动、诱捕(可搬运、可cv)
演习活动经过近几年的发展,攻击方的专业水平已大幅提高,逐渐呈现出隐秘化、APT化的趋势。其利用渗透技术对目标系统做深入探测,不断挖掘防守方网络系统的薄弱环节,这就要求防守方构建立体式纵深防护体系来抵御入侵。同时ÿ…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...