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化的趋势。其利用渗透技术对目标系统做深入探测,不断挖掘防守方网络系统的薄弱环节,这就要求防守方构建立体式纵深防护体系来抵御入侵。同时ÿ…...
1、 window平台opencv下载编译, 基于cmake和QT工具链
1. 环境准备,源码下载 1.1 前置环境 qt 下载安装cmake 安装,可参考: https://blog.csdn.net/qq_51355375/article/details/139186681 1.2 opencv 源码下载 官网地址: https://opencv.org/releases/ 下载源码: 2 …...
C++20三向比较运算符详解
三向比较运算符可以用于确定两个值的大小顺序,也被称为太空飞船操作符。使用单个表达式,它可以告诉一个值是否等于,小于或大于另一个值。 它返回的是类枚举(enumeration-like)类型,定义在 <compare> …...
监听机制与耗电量
一、监听机制与耗电量的关系 监听机制通常涉及对特定事件、状态或数据的持续监测。在移动设备和嵌入式系统中,这种监听可能由多种组件和传感器实现,如GPS、传感器(如加速度计、陀螺仪)、网络连接等。监听的频率越高,意…...
C++ //练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。
C Primer(第5版) 练习 16.29 练习 16.29 修改你的Blob类,用你自己的shared_ptr代替标准库中的版本。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 template <typename> class BlobP…...
【Mode Management】CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗
目录 前言 正文 1.CanNm从RSS状态切换到PBS状态行为分析 1.1.CanNm动作 1.2.ComM动作 1.3.DCM动作 1.4 小结 2.CanNM在PBS状态下收到一帧诊断报文行为分析 2.1.DCM动作1 2.2. ComM动作 2.3. DCM动作2 2.3. CanNm动作 2.4 问题 2.5 分析 3.总结 前言 我们知道EC…...
【C++】模版:范式编程、函数模板、类模板
目录 一.范式编程 二.函数模板 1.概念与格式 2.原理 3.实例化 4.匹配规则 三.类模板 一.范式编程 在写C函数重载的时候,可能会写很多同一类的函数,例如交换函数: void Swap(int& left, int& right) {int temp left;left r…...
验证图片旋转
最近在使用百度图片翻译时遇到一个问题,就是图片会翻转90,经与百度沟通,发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...
宏景eHR /ajax/ajaxService SQL注入漏洞复现
0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...
从源码看 Redis:深入理解 redisDb 和 redisObject
Redis 是一个广泛使用的内存数据库,以其高性能和丰富的数据结构而闻名。不同于磁盘数据库,磁盘数据库将数据读取到文件中维护,而内存数据库将数据存储在内存中,意味着其想要维护数据,必须在代码中维护一个保存数据的结…...
unity中实现流光效果——世界空间下
Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…...
建立自己的影视网站/长尾关键词是什么意思
Vim--“神一样的编译器” Vim编译器被誉为“神一样的编译器”,为什么有这样的美誉,那就是因为它能让你的双手全神贯注的在键盘上进行编程,而不是在键盘和鼠标来回切换,这样的好处是能提高你的开发效率,让你的工作更加专…...
c 做特产网站/湖北疫情最新消息
MT6129是一块高度集成的56个引脚QFN封装的射频处理芯片,支持AMPS,GSM,DCS,PCS 四频;内部包括四个低杂讯放大器,两个射频正交混频器,一个信道滤波器,一个可编程增益调节放大器,一个接收机IQ解调器,一个带锁相环的高精度的发射机IQ调制器,外接26MHz基准晶振,集成片上…...
做医药中间体的外贸网站/日本搜索引擎naver入口
linux中除了常见的读(r)、写(w)、执行(x)权限以外,还有3个特殊的权限,分别是setuid、setgid和stick bit -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd 所属者多了一…...
在谷歌上做外贸网站有用吗/买卖交易网
GO “非分代的、非紧缩、写屏障、并发标记清理” 并发清理: 垃圾回收(清理过程)与用户逻辑并发执行 三色并发标记 : 标记与用户逻辑并发执行 一般常用垃圾回收方法 引用计数 这是最简单的一种垃圾回收算法,和之前提到的智能指针异曲同工。对每个对象维护…...
零售网站建设/长沙市云网站建设
CocoaPods简介 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如AFNetWorking等等。手动去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中&…...
做部队网站技术/百度热搜榜排名昨日
目录 1.查看请求接口时的时延: 2.使用压力工具请求服务时查看系统负载:top 发现cpu,mem正常,iowait高. 3.iostat查看系统io负载 发现此磁盘sda的I/O使用率已经达到100%饱和 4.df查看sda是否是磁盘设备 df -h---->确认是系统磁盘 5.pidstat排查是哪个进程引起I/O瓶颈 6.st…...