精华内容
下载资源
问答
  • 投影矩阵

    千次阅读 2019-01-25 12:16:49
    在RmR^mRm空间有一个向量bbb,求向量到矩阵A的列空间C(A)C(A)C(A)的投影矩阵?(A是m*n的矩阵) b=p+eb=p+eb=p+e,ppp是投影向量,eee是跟列空间垂直的N(AT)N(A^T)N(AT)空间中的向量, ATe=0A^Te=0ATe=0。 (图中写...

    求投影矩阵。
    首先要描述清楚问题:

    • 先定义一个空间 R m R^m Rm
    • 这个空间中有一个向量 b b b
    • 再定义一个子空间
    • b b b投影到子空间后的向量为 p p p
    • 投影矩阵 P P P

    P b = p Pb=p Pb=p

    下面描述子空间:

    • 假设子空间的秩为r
    • 可以从子空间中选r个不相关的向量来代表这个子空间

    方便书写可以将这r个列向量放到一个矩阵中: A = [ x 1 x 2 … x r ] A=\begin{bmatrix} x_1 x_2 \dots x_r\end{bmatrix} A=[x1x2xr]

    这样可以用 C ( A ) C(A) C(A)来代表这个子空间。

    A A A is m by r, and the rank of A is r, so A T A A^TA ATA is invertable.

    (我们可以选比r多的向量来表示子空间,但这样不好求投影矩阵,而且这些向量是自己选的,没必要为难自己?)


    R m R^m Rm空间有一个向量 b b b,求向量到矩阵A的列空间 C ( A ) C(A) C(A)的投影矩阵?(A是m*n的矩阵)

    b = p + e b=p+e b=p+e p p p是投影向量, e e e是跟列空间垂直的 N ( A T ) N(A^T) N(AT)空间中的向量,
    A T e = 0 A^Te=0 ATe=0

    (图中写错两个地方,“投影向量”,其实为投影矩阵)

    上图中第2中写法是错误的,因为 A A T AA^T AAT不一定可逆,它如果可逆, P = I P=I P=I N ( A T ) N(A^T) N(AT)就不存在了。

    注意要用图中画圈的两个地方才能求出投影矩阵。


    这个投影和机器学习中的核函数不是一个概念,这个投影是线性变换,核函数是非线性变换。非线性投影。


    https://www.zhihu.com/question/263365647
    把线性变换想象成捏着空间中的单位向量旋转、拉伸,要求这个单位向量不能被弯曲,单位向量始终是直的。
    非线性变换则不同,注意的感受是扭曲了空间,例如 ϕ ( w x ) ≠ w ϕ ( x ) \phi(wx) \neq w\phi(x) ϕ(wx)̸=wϕ(x)

    展开全文
  • 矩阵论(七):投影矩阵

    万次阅读 多人点赞 2019-01-18 23:32:03
    投影矩阵 投影的定义 投影矩阵 求法 性质 投影矩阵的应用 从投影角度看广义逆 从投影角度看最小二乘 。。。 投影的定义 什么是投影?下图给出了投影的直观理解: 如图是在R3R^3R3空间中,一条直线lll与一...

    矩阵论专栏:专栏(文章按照顺序排序)

    参考资料:
    线性代数基础知识系列:12345
    广义逆矩阵(上)
    广义逆矩阵(下)


    投影矩阵

    • 投影的定义
    • 投影矩阵
      • 求法
      • 性质
    • 正交投影的性质
      • 投影定理
      • 投影定理的逆定理
    • 投影矩阵的应用
      • 从投影角度看最小二乘
      • 从投影角度看广义逆
      • (待补充)

    投影的定义

    什么是投影?下图给出了投影的直观理解:
    在这里插入图片描述
    如图是在三维空间中,一条直线 l l l与一个平面 α \alpha α相交,向量 z z z是三维空间中不在 α \alpha α内的一个向量。把 l l l看成是一束光(方向从上到下),光照射向量 z z z后,在平面 α \alpha α上留下了 z z z的阴影 x x x,这就是投影。如何用数学语言描述投影呢?观察一下,图中有 z = x + y z=x+y z=x+y,所谓的光线 l l l实际上就是向量 y y y所在的直线。因此,可以用向量的分解来描述投影。
    投影分两种情形。直观上,我们以 R n R^n Rn的基 e 1 , e 2 , . . . , e n e_1,e_2,...,e_n e1,e2,...,en分别为方向建立n个坐标轴的直角坐标系,则 R n R^n Rn中的向量在基下的坐标恰好是其自身。零向量恰好对应坐标原点。
    第一种情形是投影面过坐标原点(即零向量在投影面内),此时该投影面是 R n R^n Rn的一个子空间:
    在这里插入图片描述
    第二种情形是投影面不过坐标原点,此时投影面不是 R n R^n Rn的一个子空间(因为零向量不在投影面内):
    在这里插入图片描述
    这种情况可以看做是 R n R^n Rn的一个子空间经过平移的结果:平面 { x ∣ w T x = 0 } \{x|w^Tx=0\} {xwTx=0}沿 α ≠ 0 \alpha \neq 0 α=0平移后得到 { x ∣ w T ( x − α ) = 0 } \{x|w^T(x-\alpha)=0\} {xwT(xα)=0}(在上图中可以看做是平面从坐标原点沿 x x x平移后的结果),由于 0 ∉ { x ∣ w T ( x − α ) = 0 } 0\notin \{x|w^T(x-\alpha)=0\} 0/{xwT(xα)=0},故后者不是子空间。
    第二种情形存在的原因是为了更好地拟合数据点:
    在这里插入图片描述
    如上图,显然不过原点的平面才能更好地拟合数据点。
    第二种情形可以通过将投影面平移到坐标原点转化为第一种情形,因而我们只讨论第一种情形。下面给出投影的数学定义。(下面对投影的探讨均在 C n C^n Cn中进行, R n R^n Rn中的探讨是类似的)

    • 定义:设L和M都是 C n C^n Cn的线性子空间,且 C n = L ⊕ M C^n=L\oplus M Cn=LM ∀ z ∈ C n \forall z\in C^n zCn z z z可唯一地分解为 z = x + y , x ∈ L , y ∈ M z=x+y,x\in L, y\in M z=x+y,xL,yM。我们称 x x x z z z沿着子空间 M M M到子空间 L L L的投影。
      【注】可否将定义中的 C n = L ⊕ M C^n=L\oplus M Cn=LM改为 C n = L + M C^n=L+M Cn=L+M?答案是否定的,因为投影需要保证唯一性。

    作为一种特殊的投影,正交投影的定义如下:

    • 定义:设L是 C n C^n Cn的线性子空间,则有 C n = L ⊕ L ⊥ C^n=L\oplus L^\bot Cn=LL ∀ z ∈ C n \forall z\in C^n zCn z z z可唯一地分解为 z = x + y , x ∈ L , y ∈ L ⊥ z=x+y,x\in L, y\in L^\bot z=x+y,xL,yL。我们称 x x x z z z到子空间 L L L的正交投影。

    接下来就是投影如何求解的问题。本质上,我们将投影视作一种变换,因而我们的目标是求得映射(算子/变换) f : C n → C n f:C^n\rightarrow C^n f:CnCn,使得对于任意 z ∈ C n z\in C^n zCn f ( z ) = x f(z)=x f(z)=x,其中 x x x满足 z = x + y , x ∈ L , y ∈ M z=x+y, x\in L,y\in M z=x+y,xL,yM

    • 性质一:投影变换 f f f是线性变换(线性算子):
      ∀ z 1 , z 2 ∈ C n , c 1 , c 2 ∈ C \forall z_1,z_2\in C^n,c_1,c_2\in C z1,z2Cn,c1,c2C,设 z i = x i + y i , x i ∈ L , y i ∈ M ( i = 1 , 2 ) z_i=x_i+y_i,x_i\in L,y_i\in M(i=1,2) zi=xi+yi,xiL,yiM(i=1,2),则 f ( z 1 ) = x 1 f(z_1)=x_1 f(z1)=x1 f ( z 2 ) = x 2 f(z_2)=x_2 f(z2)=x2。由于 c 1 z 1 + c 2 z 2 = c 1 ( x 1 + y 1 ) + c 2 ( x 2 + y 2 ) = ( c 1 x 1 + c 2 x 2 ) + ( c 1 y 1 , c 2 y 2 ) c_1z_1+c_2z_2=c_1(x_1+y_1)+c_2(x_2+y_2)=(c_1x_1+c_2x_2)+(c_1y_1,c_2y_2) c1z1+c2z2=c1(x1+y1)+c2(x2+y2)=(c1x1+c2x2)+(c1y1,c2y2),且有 ( c 1 x 1 + c 2 x 2 ) ∈ L (c_1x_1+c_2x_2)\in L (c1x1+c2x2)L ( c 1 y 1 + c 2 y 2 ) ∈ M (c_1y_1+c_2y_2)\in M (c1y1+c2y2)M,故 f ( c 1 z 1 + c 2 z 2 ) = c 1 x 1 + c 2 x 2 = c 1 f ( z 1 ) + c 2 f ( z 2 ) f(c_1z_1+c_2z_2)=c_1x_1+c_2x_2=c_1f(z_1)+c_2f(z_2) f(c1z1+c2z2)=c1x1+c2x2=c1f(z1)+c2f(z2)。根据线性变换的定义知 f f f是线性变换。
    • 性质二: f f f的值域 R ( f ) = L R(f)=L R(f)=L
      显然 R ( f ) ⊆ L R(f)\subseteq L R(f)L,现证明 L ⊆ R ( f ) L\subseteq R(f) LR(f):任取 z ∈ L z\in L zL z z z可唯一地分解为 z = z + 0 , z ∈ L , 0 ∈ M z=z+0,z\in L,0\in M z=z+0,zL,0M,故 f ( z ) = z f(z)=z f(z)=z(这说明了 L L L中的向量到 L L L的投影是其自身),即 z ∈ R ( f ) z\in R(f) zR(f),故 L ⊆ R ( f ) L\subseteq R(f) LR(f)
    • 性质三:设沿着 L L L M M M的投影变换是 g : C n → C n g:C^n\rightarrow C^n g:CnCn,则 ∀ z ∈ C n \forall z\in C^n zCn g ( z ) = y = z − x = z − f ( z ) g(z)=y=z-x=z-f(z) g(z)=y=zx=zf(z)

    投影矩阵的定义根据线性变换的矩阵的定义得到:

    • 定义:线性变换 f f f(如上定义)在基 e 1 , e 2 , . . , e n e_1,e_2,..,e_n e1,e2,..,en下的矩阵称为沿着 M M M L L L投影矩阵。常将沿着 M M M L L L投影矩阵记为 P L , M P_{L,M} PL,M
    • 定义:若上述 L L L M M M满足 M = L ⊥ M=L^\bot M=L,则称线性变换 f f f(如上定义)在基 e 1 , e 2 , . . , e n e_1,e_2,..,e_n e1,e2,..,en下的矩阵为到 L L L的正交投影矩阵,常记为 P L P_L PL

    需要注意的一点是,若沿着 M M M L L L投影矩阵是 P P P,则根据 f f f的性质可知:
    1、沿 L L L M M M的投影矩阵是 I − P I-P IP(性质三)
    2、 L = { P x ∣ x ∈ C n } = R ( P ) L=\{Px|x\in C^n\}=R(P) L={PxxCn}=R(P) M = { ( I − P ) x ∣ x ∈ C n } = R ( I − P ) M=\{(I-P)x|x\in C^n\}=R(I-P) M={(IP)xxCn}=R(IP)。( R ( P ) R(P) R(P)是指 P P P的列空间)(性质二和性质三)


    投影矩阵

    投影矩阵的求法

    • 一般的投影矩阵
      求解投影矩阵的思路是将 x x x y y y分别用 L L L M M M的基表示出来。设 L L L的基按列构成矩阵 A A A M M M的基按列构成矩阵 B B B,由于 L L L的基和 M M M的基的并可作为 C n C^n Cn的一组基(这一点的证明请参考链接中子空间的运算与关系部分),因此 [ A B ] \begin{bmatrix}A&B\end{bmatrix} [AB]是可逆矩阵。设 x = A z 1 x=Az_1 x=Az1 y = B z 2 y=Bz_2 y=Bz2,则 z = [ A B ] [ z 1 z 2 ] z=\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}z_1\\z_2\end{bmatrix} z=[AB][z1z2]
      接下来用 z z z x x x表示出来:由 z = [ A B ] [ z 1 z 2 ] z=\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}z_1\\z_2\end{bmatrix} z=[AB][z1z2]可得 [ z 1 z 2 ] = [ A B ] − 1 z \begin{bmatrix}z_1\\z_2\end{bmatrix}=\begin{bmatrix}A&B\end{bmatrix}^{-1}z [z1z2]=[AB]1z,故 x = A z 1 = [ A O ] [ z 1 z 2 ] = [ A O ] [ A B ] − 1 z x=Az_1=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}z_1\\z_2\end{bmatrix}=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}z x=Az1=[AO][z1z2]=[AO][AB]1z,也就是说 f ( z ) = x = [ A O ] [ A B ] − 1 z f(z)=x=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}z f(z)=x=[AO][AB]1z。故矩阵 [ A O ] [ A B ] − 1 \begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1} [AO][AB]1是沿着 M M M L L L的投影矩阵。

    • 正交投影矩阵
      正交投影作为一种特殊的投影,完全可以将 [ A O ] [ A B ] − 1 \begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1} [AO][AB]1作为投影矩阵,其中 A A A L L L的基按列构成的矩阵, B B B L ⊥ L^\bot L的基按列构成的矩阵。但这样没有用到“正交”这个条件,不能充分发掘正交投影的数学性质。接下来,我们利用“正交”这个条件进一步探寻正交情形下投影矩阵的形式。我们有两种方式得到正交投影矩阵:

      • 从一般的投影矩阵 [ A O ] [ A B ] − 1 \begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1} [AO][AB]1出发:
        由于 L ⊥ L ⊥ L\bot L^\bot LL,即 L L L中任意向量都与 L ⊥ L^\bot L中任意向量正交,所以 A H B = O A^HB=O AHB=O B H A = O B^HA=O BHA=O。我们设法构造出 [ A B ] − 1 \begin{bmatrix}A&B\end{bmatrix}^{-1} [AB]1:由于 A A A B B B都是列满秩矩阵,故它们的左伪逆 L 1 L_1 L1 L 2 L_2 L2存在。 [ L 1 L 2 ] [ A B ] = [ ( A H A ) − 1 A H ( B H B ) − 1 B H ] [ A B ] = [ I O O I ] = I \begin{bmatrix}L_1\\L_2\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}=\begin{bmatrix}(A^HA)^{-1}A^H\\(B^HB)^{-1}B^H\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}=\begin{bmatrix}I&O\\O&I\end{bmatrix}=I [L1L2][AB]=[(AHA)1AH(BHB)1BH][AB]=[IOOI]=I,两端右乘 [ A B ] − 1 \begin{bmatrix}A&B\end{bmatrix}^{-1} [AB]1得到 [ A B ] − 1 = [ ( A H A ) − 1 A H ( B H B ) − 1 B H ] \begin{bmatrix}A&B\end{bmatrix}^{-1}=\begin{bmatrix}(A^HA)^{-1}A^H\\(B^HB)^{-1}B^H\end{bmatrix} [AB]1=[(AHA)1AH(BHB)1BH]
        因此 [ A O ] [ A B ] − 1 = [ A O ] [ ( A H A ) − 1 A H ( B H B ) − 1 B H ] = A ( A H A ) − 1 A H \begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}(A^HA)^{-1}A^H\\(B^HB)^{-1}B^H\end{bmatrix}=A(A^HA)^{-1}A^H [AO][AB]1=[AO][(AHA)1AH(BHB)1BH]=A(AHA)1AH。可见在正交的情形下,投影矩阵完全由 L L L本身确定。(同理可得到 L ⊥ L^\bot L的正交投影矩阵为 B ( B H B ) − 1 B H B(B^HB)^{-1}B^H B(BHB)1BH
      • 从正交投影在 L L L的正交基下的表示出发:
        • 引理:设 z ∈ C n z\in C^n zCn L L L C n C^n Cn的k维线性子空间, u 1 , u 2 , . . . , u k u_1,u_2,...,u_k u1,u2,...,uk L L L中的一组正交基,则 z ∈ C n z\in C^n zCn L L L的正交投影为 a = < u 1 , z > < u 1 , u 1 > u 1 + < u 2 , z > < u 2 , u 2 > u 2 + . . . + < u k , z > < u k , u k > u k a=\frac{<u_1,z>}{<u_1,u_1>}u_1+\frac{<u_2,z>}{<u_2,u_2>}u_2+...+\frac{<u_k,z>}{<u_k,u_k>}u_k a=<u1,u1><u1,z>u1+<u2,u2><u2,z>u2+...+<uk,uk><uk,z>uk
          证明:
          根据正交投影的定义,只需证明 z − a ∈ L ⊥ z-a\in L^\bot zaL即可。对 i = 1 , 2 , . . . , k i=1,2,...,k i=1,2,...,k,有 < u i , a > = ∑ j = 1 k < u i , < u j , z > < u j , u j > u j > = < u i , z > < u i , u i > < u i , u i > = < u i , z > <u_i,a>=\sum_{j=1}^k<u_i,\frac{<u_j,z>}{<u_j,u_j>}u_j>=\frac{<u_i,z>}{<u_i,u_i>}<u_i,u_i>=<u_i,z> <ui,a>=j=1k<ui,<uj,uj><uj,z>uj>=<ui,ui><ui,z><ui,ui>=<ui,z>,则 < a , u i > = < z , u i > <a,u_i>=<z,u_i> <a,ui>=<z,ui>。对 ∀ b ∈ L \forall b\in L bL,设 b = c 1 u 1 + c 2 u 2 + . . . + c k u k b=c_1u_1+c_2u_2+...+c_ku_k b=c1u1+c2u2+...+ckuk,则 < a , b > = ∑ i = 1 k c i < a , u i > = ∑ i = 1 k c i < z , u i > = < z , b > <a,b>=\sum_{i=1}^kc_i<a,u_i>=\sum_{i=1}^kc_i<z,u_i>=<z,b> <a,b>=i=1kci<a,ui>=i=1kci<z,ui>=<z,b>,即 < z − a , b > = 0 <z-a,b>=0 <za,b>=0,故 z − a ∈ L ⊥ z-a\in L^\bot zaL,得证。
        • 定理:设 L L L C n C^n Cn的k维线性子空间,设任取 L L L的一组基按列构成矩阵 A A A,则到 L L L的正交投影矩阵为 A ( A H A ) − 1 A H A(A^HA)^{-1}A^H A(AHA)1AH
          证明:任取 L L L的一组正交基 u 1 , u 2 , . . . , u k u_1,u_2,...,u_k u1,u2,...,uk按列构成矩阵 U = [ u 1 u 2 . . . u k ] U=\begin{bmatrix}u_1&u_2&...&u_k\end{bmatrix} U=[u1u2...uk],由引理知, z ∈ C n z\in C^n zCn L L L的正交投影为 a = < u 1 , z > < u 1 , u 1 > u 1 + < u 2 , z > < u 2 , u 2 > u 2 + . . . + < u k , z > < u k , u k > u k = [ u 1 u 2 . . . u k ] [ u 1 H < u 1 , u 1 > u 2 H < u 2 , u 2 > . . . u k H < u k , u k > ] z = [ u 1 u 2 . . . u k ] d i a g ( ( u 1 H u 1 ) − 1 , ( u 2 H u 2 ) − 1 , . . . , ( u k H u k ) − 1 ) [ u 1 H u 2 H . . . u k H ] z = U ( U H U ) − 1 U H z \begin{aligned}a&=\frac{<u_1,z>}{<u_1,u_1>}u_1+\frac{<u_2,z>}{<u_2,u_2>}u_2+...+\frac{<u_k,z>}{<u_k,u_k>}u_k\\&=\begin{bmatrix}u_1&u_2&...&u_k\end{bmatrix}\begin{bmatrix}\frac{u_1^H}{<u_1,u_1>}\\\frac{u_2^H}{<u_2,u_2>}\\...\\\frac{u_k^H}{<u_k,u_k>}\end{bmatrix}z\\&=\begin{bmatrix}u_1&u_2&...&u_k\end{bmatrix}diag((u_1^Hu_1)^{-1},(u_2^Hu_2)^{-1},...,(u_k^Hu_k)^{-1})\begin{bmatrix}u_1^H\\u_2^H\\...\\u_k^H\end{bmatrix}z\\&=U(U^HU)^{-1}U^Hz\end{aligned} a=<u1,u1><u1,z>u1+<u2,u2><u2,z>u2+...+<uk,uk><uk,z>uk=[u1u2...uk]<u1,u1>u1H<u2,u2>u2H...<uk,uk>ukHz=[u1u2...uk]diag((u1Hu1)1,(u2Hu2)1,...,(ukHuk)1)u1Hu2H...ukHz=U(UHU)1UHz U ( U H U ) − 1 U H U(U^HU)^{-1}U^H U(UHU)1UH是到 L L L的正交投影矩阵。设 A A A U U U的过渡矩阵为 P P P,则 P P P是可逆矩阵, U = A P U=AP U=AP U ( U H U ) − 1 U H = ( A P ) ( ( A P ) H ( A P ) ) − 1 ( A P ) H = A P P − 1 ( A H A ) − 1 ( P H ) − 1 P H A H = A ( A H A ) − 1 A H U(U^HU)^{-1}U^H=(AP)((AP)^H(AP))^{-1}(AP)^H=APP^{-1}(A^HA)^{-1}(P^H)^{-1}P^HA^H=A(A^HA)^{-1}A^H U(UHU)1UH=(AP)((AP)H(AP))1(AP)H=APP1(AHA)1(PH)1PHAH=A(AHA)1AH,故 A ( A H A ) − 1 A H A(A^HA)^{-1}A^H A(AHA)1AH是到 L L L的正交投影矩阵。

    投影矩阵的性质

    投影矩阵最重要的一个性质是它与幂等矩阵间的关系。实际上,任意投影矩阵都是幂等矩阵,任意幂等矩阵都是投影矩阵。

    • 定义:设 P ∈ C n × n P\in C^{n\times n} PCn×n,若 P 2 = P P^2=P P2=P,则称 P P P是幂等矩阵

    • 一般的投影矩阵

      • 定理1:设 C n = L ⊕ M C^n=L\oplus M Cn=LM,则沿着 M M M L L L的投影矩阵 [ A O ] [ A B ] − 1 \begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1} [AO][AB]1(如上定义)是幂等矩阵
        证明:
        法1:直接计算
        注意到 [ A O ] = [ A B ] [ I O O O ] \begin{bmatrix}A&O\end{bmatrix}=\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}I&O\\O&O\end{bmatrix} [AO]=[AB][IOOO],于是 [ A O ] [ A B ] − 1 [ A O ] [ A B ] − 1 = [ A B ] [ I O O O ] [ A B ] − 1 [ A B ] [ I O O O ] [ A B ] − 1 = [ A B ] [ I O O O ] [ A B ] − 1 = [ A O ] [ A B ] − 1 \begin{aligned}&\quad\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\\&=\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}I&O\\O&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}I&O\\O&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\\&=\begin{bmatrix}A&B\end{bmatrix}\begin{bmatrix}I&O\\O&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\\&=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1}\end{aligned} [AO][AB]1[AO][AB]1=[AB][IOOO][AB]1[AB][IOOO][AB]1=[AB][IOOO][AB]1=[AO][AB]1得证。
        法2:根据 L L L中向量到 L L L的投影是其自身
        P = [ A O ] [ A B ] − 1 P=\begin{bmatrix}A&O\end{bmatrix}\begin{bmatrix}A&B\end{bmatrix}^{-1} P=[AO][AB]1,由 L = { P x ∣ x ∈ C n } L=\{Px|x\in C^n\} L={PxxCn}知,任取 x ∈ C n x\in C^n xCn,有 P x ∈ L Px\in L PxL,由于 P ( P x ) = P x P(Px)=Px P(Px)=Px ( P 2 − P ) x = 0 (P^2-P)x=0 (P2P)x=0,故由零矩阵的判定条件可得 P 2 = P P^2=P P2=P

      • 定理2:设 P ∈ C n × n P\in C^{n\times n} PCn×n是一幂等矩阵,则 P P P也是一投影矩阵
        证明:
        L = { P x ∣ x ∈ C n } L=\{Px|x\in C^n\} L={PxxCn} M = { ( I − P ) x ∣ x ∈ C n } M=\{(I-P)x|x\in C^n\} M={(IP)xxCn},容易证明 L L L M M M C n C^n Cn的线性子空间。因为 ∀ x ∈ C n \forall x\in C^n xCn x x x可分解为 x = P x + ( I − P ) x x=Px+(I-P)x x=Px+(IP)x,其中 P x ∈ L Px\in L PxL ( I − P ) x ∈ M (I-P)x\in M (IP)xM,故 C n ⊆ L + M C^n\subseteq L+M CnL+M。又 L + M ⊆ C n L+M\subseteq C^n L+MCn,故 C n = L + M C^n=L+M Cn=L+M ∀ y ∈ L ∩ M \forall y\in L\cap M yLM ∃ z 1 , z 2 ∈ C n \exist z_1,z_2\in C^n z1,z2Cn使得 y = P z 1 = ( I − P ) z 2 y=Pz_1=(I-P)z_2 y=Pz1=(IP)z2,因为 P y = P 2 z 1 = P z 1 = y Py=P^2z_1=Pz_1=y Py=P2z1=Pz1=y P y = P ( I − P ) z 2 = ( P 2 − P ) z 2 = 0 Py=P(I-P)z_2=(P^2-P)z_2=0 Py=P(IP)z2=(P2P)z2=0,故 y = 0 y=0 y=0,故 L ∩ M = L ( 0 ) L\cap M=L(0) LM=L(0),故 C n = L ⊕ M C^n=L\oplus M Cn=LM。这说明 ∀ x ∈ C n \forall x\in C^n xCn x x x的分解式 x = y + z x=y+z x=y+z y ∈ L y\in L yL z ∈ M z\in M zM是唯一的,且该分解式是 x = P x + ( I − P ) x x=Px+(I-P)x x=Px+(IP)x P x Px Px x x x沿着 M M M L L L的投影。这就证明了 P P P是沿着 M M M L L L的投影矩阵。

    • 正交投影矩阵

      • 定理3:设 C n = L ⊕ L ⊥ C^n=L\oplus L^\bot Cn=LL,则到 L L L的投影矩阵 A ( A H A ) − 1 A H A(A^HA)^{-1}A^H A(AHA)1AH(如上定义)是共轭对称的幂等矩阵
        证明:根据共轭对称和幂等的定义即证。
      • 定理4:设 P ∈ C n × n P\in C^{n\times n} PCn×n是一共轭对称的幂等矩阵,则 P P P也是一正交投影矩阵
        证明:
        L = { P x ∣ x ∈ C n } L=\{Px|x\in C^n\} L={PxxCn} M = { ( I − P ) x ∣ x ∈ C n } M=\{(I-P)x|x\in C^n\} M={(IP)xxCn},容易证明 C n = L + M C^n=L+M Cn=L+M(参照上面的定理)。 ∀ x ∈ L , y ∈ M \forall x\in L,y\in M xL,yM ∃ z 1 ∈ C n , z 2 ∈ C n \exist z_1\in C^n, z_2\in C^n z1Cn,z2Cn使得 x = P z 1 , y = ( I − P ) z 2 x=Pz_1,y=(I-P)z_2 x=Pz1,y=(IP)z2 < x , y > = x H y = z 1 H P H ( I − P ) z 2 = z 1 H P ( I − P ) z 2 = 0 <x,y>=x^Hy=z_1^HP^H(I-P)z_2=z_1^HP(I-P)z_2=0 <x,y>=xHy=z1HPH(IP)z2=z1HP(IP)z2=0,故 L ⊥ M L\bot M LM,又 C n = L + M C^n=L+M Cn=L+M,故 M = L ⊥ M=L^\bot M=L ∀ x ∈ C n \forall x\in C^n xCn x = P x + ( I − P ) x x=Px+(I-P)x x=Px+(IP)x P x ∈ L Px\in L PxL ( I − P ) x ∈ M = L ⊥ (I-P)x\in M=L^\bot (IP)xM=L,这说明 P x Px Px x x x L L L的正交投影,故 P P P是到 L L L的正交投影矩阵。

    正交投影的性质

    正交投影是最常用的投影方式,原因在于它能够使得原向量和它的投影之间的距离最小,即通常直觉上的“垂直距离最小”。对于数据点来说即原数据点与投影后的数据点的差异最小,无论在数据拟合还是去噪时都起着至关重要的作用。

    • 投影定理:设 L L L C n C^n Cn的一个线性子空间, P P P是到 L L L的正交投影矩阵, ∀ x ∈ C n \forall x\in C^n xCn,若 x ^ = P x \hat x=Px x^=Px,则 ∀ y ∈ L \forall y\in L yL ∣ ∣ x − x ^ ∣ ∣ 2 ⩽ ∣ ∣ x − y ∣ ∣ 2 ||x-\hat x||_2\leqslant ||x-y||_2 xx^2xy2
      证明:
      ∀ x ∈ C n , y ∈ L \forall x\in C^n,y\in L xCn,yL, ( I − P ) x ∈ L ⊥ (I-P)x\in L^\bot (IP)xL,故 ( I − P ) x (I-P)x (IP)x与任意 L L L中向量正交。因为 P x − y ∈ L Px-y\in L PxyL,故 < x − P x , P x − y > = 0 <x-Px,Px-y>=0 <xPx,Pxy>=0
      ∣ ∣ x − y ∣ ∣ 2 2 = ∣ ∣ x − P x + P x − y ∣ ∣ 2 2 = ∣ ∣ x − P x ∣ ∣ 2 2 + ∣ ∣ P x − y ∣ ∣ 2 2 + 2 R e { < x − P x , P x − y > } = ∣ ∣ x − P x ∣ ∣ 2 2 + ∣ ∣ P x − y ∣ ∣ 2 2 ⩾ ∣ ∣ x − P x ∣ ∣ 2 2 \begin{aligned}||x-y||_2^2&=||x-Px+Px-y||_2^2\\&=||x-Px||_2^2+||Px-y||_2^2+2Re\{<x-Px,Px-y>\}\\&=||x-Px||_2^2+||Px-y||_2^2\\&\geqslant ||x-Px||^2_2\end{aligned} xy22=xPx+Pxy22=xPx22+Pxy22+2Re{<xPx,Pxy>}=xPx22+Pxy22xPx22
    • 投影定理逆定理:设 L L L C n C^n Cn的一个线性子空间, P P P是到 L L L的正交投影矩阵, ∀ x ∈ C n \forall x\in C^n xCn,若 x ^ ∈ L \hat x\in L x^L满足 ∀ y ∈ L \forall y\in L yL ∣ ∣ x − x ^ ∣ ∣ 2 ⩽ ∣ ∣ x − y ∣ ∣ 2 ||x-\hat x||_2\leqslant ||x-y||_2 xx^2xy2,则 x ^ = P x \hat x=Px x^=Px
      证明:
      ∀ x ∈ C n \forall x\in C^n xCn,设实值函数 f ( y ) = ∣ ∣ x − y ∣ ∣ 2 2 , y ∈ L f(y)=||x-y||_2^2,y\in L f(y)=xy22,yL,则 f f f x ^ \hat x x^处取得最小值。
      ∀ v ∈ L \forall v\in L vL,构造实函数 g v ( t ) = f ( x ^ − t v ) , t ∈ R g_v(t)=f(\hat x-tv),t\in R gv(t)=f(x^tv),tR,则 g v g_v gv t = 0 t=0 t=0处取得最小值,由极值的必要条件得 g ′ ( 0 ) = 0 g'(0)=0 g(0)=0,计算可得 R e { < x − x ^ , v > } = 0 Re\{<x-\hat x,v>\}=0 Re{<xx^,v>}=0。同理, ∀ v ∈ L \forall v\in L vL,构造 h v ( t ) = f ( x ^ − i t v ) , t ∈ R h_v(t)=f(\hat x-itv),t\in R hv(t)=f(x^itv),tR i i i是虚数单位),可得 I m { < x − x ^ , v > } = 0 Im\{<x-\hat x,v>\}=0 Im{<xx^,v>}=0。故 ∀ v ∈ L \forall v\in L vL,有 < x − x ^ , v > = 0 <x-\hat x,v>=0 <xx^,v>=0,故 x − x ^ ∈ L ⊥ x-\hat x\in L^\bot xx^L。因为 x = x ^ + ( x − x ^ ) , x ^ ∈ L , x − x ^ ∈ L ⊥ x=\hat x+(x-\hat x),\hat x\in L,x-\hat x\in L^\bot x=x^+(xx^),x^L,xx^L,故 x ^ = P x \hat x=Px x^=Px

    简单概括一下就是,正交投影满足“垂直距离最小”,要想使得投影后的数据点与原数据点间的差异最小,非正交投影(叫斜投影)是不行的,只有正交投影才可以。


    投影矩阵的应用

    投影矩阵的应用如最小二乘、广义逆、PCA等,先写几个简单的,后面碰到了再补充。

    从投影角度看最小二乘

    前面的博客(广义逆矩阵)中,我们使用广义逆矩阵解决了不相容方程组(非一致方程/超定方程组,都是指没有精确解) A x = y Ax=y Ax=y的最小二乘解问题,并证明了最小二乘解与正规方程的精确解间的关系。如果把问题限定在实数域下,还可以使用矩阵求导和凸优化理论得到同样的结论:求最小二乘解等价于解正规方程。现在,我们从正交投影的角度重新审视最小二乘解问题,并不出所料地再次得到求最小二乘解等价于解正规方程的结论。

    • 定义:方程 A m × n x = y A_{m\times{n}}x=y Am×nx=y的最小二乘解 x ^ \hat{x} x^定义为 x ^ \hat{x} x^满足 ∣ ∣ A x ^ − y ∣ ∣ 2 = min ⁡ x ∈ C n ∣ ∣ A x − y ∣ ∣ 2 ||A\hat{x}-y||_2=\min_{x\in{C^n}}{||Ax-y||_2} Ax^y2=xCnminAxy2

    • 定理: A x = y Ax=y Ax=y是相容方程组的充要条件是 y ∈ R ( A ) y\in R(A) yR(A),其中 R ( A ) R(A) R(A) A A A的列空间
      证明:由列空间的定义 R ( A ) = { A x ∣ x ∈ C n } R(A)=\{Ax|x\in C^n\} R(A)={AxxCn}即得。

    上述定理说明方程组不相容的原因是 y y y不在 A A A的列空间 R ( A ) R(A) R(A)中。我们容易猜到可以将 y y y正交投影到 R ( A ) R(A) R(A)中,然后求解新的方程组。现在我们验证一下这个猜想:由最小二乘解的定义,要找到 R ( A ) R(A) R(A)中一个向量 A x ^ A\hat x Ax^,使得对于 R ( A ) R(A) R(A)中任意向量 A x Ax Ax,都有 ∣ ∣ y − A x ^ ∣ ∣ 2 ⩽ ∣ ∣ y − A x ∣ ∣ 2 ||y-A\hat x||_2\leqslant ||y-Ax||_2 yAx^2yAx2。故由投影定理及其逆定理,我们要找的 A x ^ A\hat x Ax^就是 y y y R ( A ) R(A) R(A)中的正交投影 P y Py Py,其中 P P P是到 R ( A ) R(A) R(A)的正交投影矩阵。这就是说,求 A x = y Ax=y Ax=y最小二乘解等价于求 A x = P y Ax=Py Ax=Py的解。
    接下来,我们通过证明 A x = P y Ax=Py Ax=Py与正规方程 A H A x = A H y A^HAx=A^Hy AHAx=AHy是同解方程组来验证这种做法的正确性:

    • 定理:设 A ∈ C m × n A\in C^{m\times n} ACm×n,到 R ( A ) R(A) R(A)的正交投影矩阵是 P P P,则 A x = P y Ax=Py Ax=Py A H A x = A H y A^HAx=A^Hy AHAx=AHy等价
      证明:
      ( I − P ) y ∈ R ( A ) ⊥ = N ( A H ) (I-P)y\in R(A)^\bot=N(A^H) (IP)yR(A)=N(AH),得 A H ( I − P ) y = 0 A^H(I-P)y=0 AH(IP)y=0
      ⇒ \Rightarrow :若 A x = P y Ax=Py Ax=Py,则 A H A x = A H P y A^HAx=A^HPy AHAx=AHPy。故 A H A x = A H P y + A H ( I − P ) y = A H y A^HAx=A^HPy+A^H(I-P)y=A^Hy AHAx=AHPy+AH(IP)y=AHy
      ⇐ \Leftarrow :若 A H A x = A H y A^HAx=A^Hy AHAx=AHy,则 A H A x = A H y = A H P y + A H ( I − P ) y = A H P y A^HAx=A^Hy=A^HPy+A^H(I-P)y=A^HPy AHAx=AHy=AHPy+AH(IP)y=AHPy。由于 ( A x − P y ) ∈ R ( A ) (Ax-Py)\in R(A) (AxPy)R(A),而 A H ( A x − P y ) = 0 A^H(Ax-Py)=0 AH(AxPy)=0说明 ( A x − P y ) ∈ N ( A H ) (Ax-Py)\in N(A^H) (AxPy)N(AH),故 ( A x − P y ) ∈ R ( A ) ∩ N ( A H ) = L ( 0 ) (Ax-Py)\in R(A)\cap N(A^H)=L(0) (AxPy)R(A)N(AH)=L(0),即 A x − P y = 0 Ax-Py=0 AxPy=0,故 A x = P y Ax=Py Ax=Py

    从投影的角度,我们再次得到了“求最小二乘解等价于解正规方程”这个结论。下面我们总结用正交投影求 A x = y Ax=y Ax=y的最小二乘解的方法:
    第一步,求到 R ( A ) R(A) R(A)的正交投影矩阵。根据前面投影矩阵的求法,只要找到 R ( A ) R(A) R(A)的一组基即可。取 A A A的列向量组的一个极大无关组(只要对 A A A施加初等行变换,将其化成行阶梯形,行阶梯形的每个非零行的首非零元所在列对应 A A A中的列(例如,行阶梯形的某非零行的首非零元在第i列,则对应的是 A A A的第i列)就是极大无关组中的一个向量)构成列满秩矩阵 B B B,则正交投影矩阵 P = B ( B H B ) − 1 B H P=B(B^HB)^{-1}B^H P=B(BHB)1BH
    第二步,求解相容方程组 A x = P y Ax=Py Ax=Py

    顺便总结一下求 A x = y Ax=y Ax=y的最小二乘解的方法:
    1、根据广义逆理论,求最小二乘解等价于求 A x = A A ( 1 , 3 ) y Ax=AA^{(1,3)}y Ax=AA(1,3)y(或 A x = A A + y Ax=AA^+y Ax=AA+y)的精确解
    (实际上这个方法没必要,如果求出了 A + A^+ A+,则 A + y A^+y A+y就是最小二乘解了)
    2、根据投影理论,求最小二乘解等价于求 A x = P y Ax=Py Ax=Py的精确解,其中 P P P是到 R ( A ) R(A) R(A)的正交投影矩阵
    3、根据广义逆理论或投影理论,我们证明了求最小二乘解等价于求正规方程 A H A x = A H y A^HAx=A^Hy AHAx=AHy的精确解

    从投影角度看广义逆

    前面的博客中我们曾从研究线性方程组的解出发引入了各种广义逆矩阵({1}逆、{1,3}逆、{1,4}逆、PM逆)的定义,并顺手解决了线性方程组的通解、极小范数解、最小二乘解、极小范数最小二乘解的问题。现在回顾一下它们的定义:

    Penrose于1955年提出了Penrose-Moore条件,满足这些条件中的任何一个的矩阵G都可以称为A的一个广义逆矩阵,它们分别是:

    1. A G A = A AGA=A AGA=A
    2. G A G = G GAG=G GAG=G
    3. ( A G ) H = A G (AG)^H=AG (AG)H=AG
    4. ( G A ) H = G A (GA)^H=GA (GA)H=GA

    满足第一条的矩阵称为 A A A的{1}逆,记为 G = A ( 1 ) G=A^{(1)} G=A(1);同时满足一、三条的矩阵称为 A A A的{1,3}逆,记为 G = A ( 1 , 3 ) G=A^{(1,3)} G=A(1,3);同时满足一、四条的矩阵称为 A A A的{1,4}逆,记为 G = A ( 1 , 4 ) G=A^{(1,4)} G=A(1,4);同时满足一、二、三、四条的矩阵称为 A A A的Moore-Penrose广义逆(PM逆),记为 G = A + G=A^+ G=A+。以此类推。
    实际上,15类广义逆矩阵中多数都可以用投影来定义。下面我们举五个例子证明:

    • 引理: R ( A A ( 1 ) ) = R ( A ) R(AA^{(1)})=R(A) R(AA(1))=R(A)
      证明:
      R ( A A ( 1 ) ) ⊆ R ( A ) R(AA^{(1)})\subseteq R(A) R(AA(1))R(A):任取 x ∈ R ( A A ( 1 ) ) x\in R(AA^{(1)}) xR(AA(1)),则 ∃ y \exist y y使得 x = A A ( 1 ) y x=AA^{(1)}y x=AA(1)y,即 ∃ z = A ( 1 ) y \exist z=A^{(1)}y z=A(1)y使得 x = A z x=Az x=Az,故 x ∈ R ( A ) x\in R(A) xR(A)
      R ( A A ( 1 ) ) ⊇ R ( A ) R(AA^{(1)})\supseteq R(A) R(AA(1))R(A):任取 x ∈ R ( A ) x\in R(A) xR(A),则 ∃ y \exist y y使得 x = A y = A A ( 1 ) A y x=Ay=AA^{(1)}Ay x=Ay=AA(1)Ay,即 ∃ z = A y \exist z=Ay z=Ay使得 x = A A ( 1 ) z x=AA^{(1)}z x=AA(1)z,故 x ∈ R ( A A ( 1 ) ) x\in R(AA^{(1)}) xR(AA(1))

    同理可证 R ( A ( 1 ) A ) = R ( A ( 1 ) ) R(A^{(1)}A)=R(A^{(1)}) R(A(1)A)=R(A(1)) R ( A A ( 1 , 3 ) ) = R ( A ) R(AA^{(1,3)})=R(A) R(AA(1,3))=R(A) R ( A ( 2 , 4 ) A ) = R ( A ( 2 , 4 ) ) R(A^{(2,4)}A)=R(A^{(2,4)}) R(A(2,4)A)=R(A(2,4))等等。

    • G ∈ A { 1 } G\in A\{1\} GA{1}的充要条件为 A G AG AG是到 R ( A ) R(A) R(A)的投影矩阵
      证明:
      必要性:用 G G G右乘 A G A = A AGA=A AGA=A得到 ( A G ) 2 = A G (AG)^2=AG (AG)2=AG,即 A G AG AG是幂等矩阵。由“投影矩阵的性质”定理2知 A G AG AG是沿着 R ( I − A G ) R(I-AG) R(IAG) R ( A G ) R(AG) R(AG)的投影矩阵,即到 R ( A ) R(A) R(A)的投影矩阵。
      充分性:任取 A A A的一列 a a a a ∈ R ( A ) a\in R(A) aR(A)),由投影算子的性质知 A G a = a AGa=a AGa=a,故 A G A = A AGA=A AGA=A
    • G ∈ A { 2 } G\in A\{2\} GA{2}的充要条件为 A G AG AG是到 R ( G ) R(G) R(G)的投影矩阵
      证明:与上同理。
    • G ∈ A { 1 , 3 } G\in A\{1,3\} GA{1,3}的充要条件为 A G AG AG是到 R ( A ) R(A) R(A)的正交投影矩阵
      证明:
      必要性:用 G G G右乘 A G A = A AGA=A AGA=A得到 ( A G ) 2 = A G (AG)^2=AG (AG)2=AG,又 ( A G ) H = A G (AG)^H=AG (AG)H=AG,故 A G AG AG是共轭对称的幂等矩阵。由“投影矩阵的性质”定理4知 A G AG AG是到 R ( A G ) R(AG) R(AG)的正交投影矩阵,即到 R ( A ) R(A) R(A)的正交投影矩阵。
      充分性:任取 A A A的一列 a a a a ∈ R ( A ) a\in R(A) aR(A)),由投影算子的性质知 A G a = a AGa=a AGa=a,故 A G A = A AGA=A AGA=A,由于正交投影矩阵都是共轭对称的,故 ( A G ) H = A G (AG)^H=AG (AG)H=AG
    • G ∈ A { 2 , 4 } G\in A\{2,4\} GA{2,4}的充要条件为 G A GA GA是到 R ( G ) R(G) R(G)的正交投影矩阵
      证明:
      必要性:用 A A A右乘 G A G = G GAG=G GAG=G得到 ( G A ) 2 = G A (GA)^2=GA (GA)2=GA,又 ( G A ) H = G A (GA)^H=GA (GA)H=GA,故 G A GA GA是共轭对称的幂等矩阵。由“投影矩阵的性质”定理4知 G A GA GA是到 R ( G A ) R(GA) R(GA)的正交投影矩阵,即到 R ( G ) R(G) R(G)的正交投影矩阵。
      充分性:任取 G G G的一列 g g g g ∈ R ( G ) g\in R(G) gR(G)),由投影算子的性质知 G A g = g GAg=g GAg=g,故 G A G = G GAG=G GAG=G,由于正交投影矩阵都是共轭对称的,故 ( G A ) H = G A (GA)^H=GA (GA)H=GA
    • G = A + G=A^+ G=A+的充要条件为 A G = P R ( A ) AG=P_{R(A)} AG=PR(A) G A = P R ( G ) GA=P_{R(G)} GA=PR(G)
      证明:
      结合上面 A { 1 , 3 } A\{1,3\} A{1,3} A { 2 , 4 } A\{2,4\} A{2,4}的充要条件即得。

    PM逆最早被Moore提出,就是用投影来定义的;后来Penrose证明了Moore的定义与我们所说的四个条件(Penrose-Moore条件)是等价的,于是就有了用这四个条件的定义。Penrose的定义是现在最常用的,因为它看起来更简单直观。

    展开全文
  • 投影矩阵的推导(Deriving Projection Matrices)

    万次阅读 多人点赞 2014-04-07 18:34:48
    投影矩阵的推导(DerivingProjection Matrices)   本文乃译文,原文地址为: http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm,由于本人能力有限,有译的不...

     

            本文乃<投影矩阵的推导>译文,原文地址为:

            http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm,由于本人能力有限,有译的不明白的地方大家可以参考原文,谢谢^-^!

            译者: 流星上的潴

            如需转载,请注明出处,感谢!

     

            在3D图形程序的基本矩阵变换中,投影矩阵是其中比较复杂的。平移和缩放浏览一下就能理解,旋转矩阵只要掌握了三角函数知识也可以理解,但投影矩阵有点棘手。如果你曾经看过投影矩阵,你会发现你的常识不足以告诉你它是怎么来的。而且,我在网上还未看到许多关于如何推导投影矩阵的教程资源。本文的话题就是如何推导投影矩阵。

            对于刚刚开始接触3D图形的人,我应该指出,理解投影矩阵如何推导可能是我们对于数学的好奇心,它不是必须的。你可以只用公式,并且如果你用像Direct3D那样的图形API,你甚至都不需要使用公式,图形API会为你构建一个投影矩阵。所以,如果本文看起来有点难,不要害怕。只要你理解了投影矩阵做了什么,你没必要在你不想的情况下关注它是怎么做的。本文是给那些想了解更多的程序员的。

            概述: 什么是投影?

            计算机显示器是一个二维表面,所以如果你想显示三维图像,你需要一种方法把3D几何体转换成一种可作为二维图像渲染的形式。那也正是投影做的。拿一个简单的例子来说,一种把3D对象投影到2D表面的方法是简单的把每个坐标点的z坐标丢弃。对立方体来说,看上去可能像图1:

    图1: 通过丢弃Z坐标投影到XY平面

            当然,这过于简单,并且在大多数情况下不是特别有用。首先,根本不会投影到一个平面上;相反,投影公式将变换你的几何体到一个新的空间体中,称为规范视域体(canonical view volume),规范视域体的精确坐标可能在不同的图形API之间互不相同,但作为讨论起见,把它认为是从(-1, -1, 0)延伸至(1, 1, 1)的盒子,这也是Direct3D中使用的。一旦所有顶点被映射到规范视域体,只有它们的x和y坐标被用于映射到屏幕上。这并不代表z坐标是无用的,它通常被深度缓冲用于可见度测试。这就是为什么变换到一个新的空间体中,而不是投影到一个平面上。

            注意,图1描述的是左手坐标系,摄像机俯视z轴正方向,y轴朝上并且x轴朝右。这是Direct3D中使用的坐标系,本文中我都将使用该坐标系。对于右手坐标系系统来说,在计算方面没有明显差异,在规范视域体方面有一点区别,所以一切讨论仍将适用即使你的图形API使用与Direct3D不同的规定。

    现在,可以进入实际的投影变换了。有许多投影方法,我将介绍最常见的2种:正交和透视。

     

            正交投影(Orthographic Projection)

            正交投影,之所以这么称呼是因为所有的投影线都与最终的绘图表面垂直,是一种相对简单的投影技术。视域体,也就是包含所有你想显示的几何体的可视空间——是一个将被变换到规范视域体的轴对齐盒子,见图2:

    图2: 正交投影

            正如你看见的,视域体由6个面定义:

            

            因为视域体和规范视域体都是轴对齐盒子,这种类型的投影没有距离更正。最终的结果是,事实上,很像图1那样每个坐标点只是丢弃了z坐标。对象在3D空间中的大小和在投影中的大小相同,即使一个对象比另一个对象距离摄像机远很多。在3D空间中平行的直线在最终的图像上也是平行的。使用这种类型的投影将出现一些问题像第一人称射击游戏——试想一下在不知道任何东西有多远的情况下玩!但它也有它的用处。你可能在格子游戏中使用它,例如,特别是摄像机被绑定在一个固定角度的一款格子游戏中,图3显示了1个简单的例子:

    图3: 正交投影的一个简单例子

            所以,事不宜迟,现在开始弄清楚它是如何工作的。最简单的方法可能是3个坐标轴分开考虑,并且计算如何沿着每个坐标轴将点从视域体映射到规范视域体。从x轴开始,视域体中的点的x坐标范围在[l, r],想把它变换到范围在[-1, 1]:

            

            现在,准备把范围缩小到我们期望的,各项减去l,这样,最左边的项变为0。另一种可能考虑的做法是平移范围使其以0为中心,而不是一端为0,但现在这种方式代数式更整洁,所以为了可读性起见我将以现在这种方式做:

            

            现在,范围的一端是0,你可以缩小到期望的大小。你期望x值的范围是2个单位宽,从1到-1,所以把各项乘以2/(r-l)。注意r-l是视域体的宽度,因此始终是一个正数,所以不用担心不等号会改变方向:

            

            下一步,各项减去1就产生了我们期望的范围[-1,1]:

            

            基本代数允许我们将中间项写成一个单一的分数:

            

            最后,把中间项分成两部分使它形如px+q的形式,我们需要把项组织成这种形式这样我们推导的公式就可以简单的转换成矩阵形式:

            

            这个不等式的中间项告诉了我们把x转换到规范视域体的公式:

            

            获取y的变换公式的步骤是完全一样的——只要用y替代x,用t替代r,用b替代l——所以这里不重复它们了,只是给出结果:

            

            最后,需要推倒z的变换公式。z的推导有点不同,因为需要把z映射到范围[0, 1]而不是[-1, 1],但看上去很相似。z坐标最开始在范围[n,f]:

            

            把各项减去n,这样的话范围的下限就变为了0:

            

            现在剩余要做的就是除以f-n,这样就产生了最终的范围[0,1]。和前面相同,注意f-n是视域体的深度所以绝对不会为负:

            

            最后,把它分成两部分使它形如px+q的形式:

            

            这样便给出了z的变换公式

            

            现在,可以准备写正交投影矩阵了。总结到目前为止的工作,推导了3个投影公式:

            

            如果写成矩阵形式,就得到了:

            

            就是这样!Direct3D提供了D3DXMatrixOrthoOffCenterLH()(what a mouthful!)方法构造一个和这个公式相同的正交投影矩阵;你可以在DirectX文档中找到。方法名中的"LH"代表了你正在使用左手坐标系。但是,究竟"OffCenter"的意思是什么呢?

            这一问题的答案引导你到一个正交投影矩阵的简化形式。考虑几点: 首先,在可见空间中,摄像机定位在原点并且沿着z轴方向观看。第二,你通常希望你的视野在左右方向上延伸的同样远,并且在z轴的上下方向上也延伸的同样远。如果是这样的情况,那么z轴正好直接穿过你视域体的的中心,所以得到了r = -l并且t = -b。换句话说,你可以把r, l, t和b一起忘掉,简单的把视域体定义为1个宽度w和1个高度h,以及裁剪面f和n。如果你在正交投影矩阵中应用上面说的,那么你将得到这个相当简化的版本:

            

            这个公式是Direct3D中D3DXMatrixOrthoLH()方法的实现。你几乎可以一直使用这个矩阵替代上面那个你推导的更通用的"OffCenter"版本,除非你用投影做些奇怪的事情。

            在完成这部分之前还有一点。它启发我们注意到这个矩阵可以用两个简单的变换串联替代:平移其次是缩放。如果你思考几何的话这对你是有意义的,因为所有你在正交投影中做的就是从一个轴对齐盒子转向另一个轴对齐盒子;视域体不改变它的形状,只改变它的位置和大小。具体来说,有:

            

            这种投影方式可能更直观一点因为它让你更容易想象发生了什么。首先,视域体沿着z轴平移使它的近平面和原点重合;然后,应用一个缩放把它缩小到规范视域体大小。很容易理解吧,对不对?一个偏离中心(OffCenter)的正交投影矩阵也可以用一个变换和一个缩放代替,它和上面的结果很相似所以我在这里不列出了。

            上面就是正交投影,现在可以去接触一些更有挑战性的东西了。

     

            透视投影(Perspective Projection)

            透视投影是稍复杂的一种投影方法,并且用的越来越平凡,因为它创造了距离感,因此会生成更逼真的图像。从几何上说,这种方法与正交投影不同的地方在于透视投影的视域体是一个平截头体——也就是,一个截断的金字塔,而不是一个轴对称盒子。见图4:

    图4: 透视投影

            正如你所看见的,视域体的近平面从(l,b, n)延伸至(r, t, n)。远平面范围是从原点发射穿过近平面四个点的射线直至与平面z=f相交。由于视域体从原点进一步延伸,它变得越来越宽大;同时你将这个形状变换到规范视域体盒子;视域体的远端比视域体的近端压缩的更厉害。因此,视域体远端的物体会变得更小,这就给了你距离感。

            由于空间体形状的这种变换,透视投影不能像正交投影那样简单的表达为一个平移和一个缩放。你必须制定一些不同的东西。但是,这并不意味着你在正交投影上做的工作是无用的。一个方便的解决数学问题的方法是把问题减少到你已经知道怎么解决的那一个。所以,这就是你在这里可以做的。上一次,你一次检查一个坐标,但这次,你将把x和y坐标合起来一起做,然后再考虑z坐标。你对x和y的处理可以分2个步骤:

            第1步: 给定视域体中的点(x,y, z),把它投影到近平面z=n。由于投影点在近平面上,所以它的x坐标范围在[l, r],y坐标范围在[b, t]。

            第2步: 使用你在正交投影中学会推导的公式,把x坐标从[l, r]映射到[-1, 1],把y坐标范围从[b, t]映射到[-1, 1]。

            听上去很棒吧?看一看图5:


    图5: 使用相似三角形投影一个点到z=n平面

            在这个图中,你从点(x, y, z)到原点画了条直线,注意直线与z=n平面相交的那个点——用黑色标记的那个。通过这些点,你画了2条相对于z轴的垂线,突然你得到了一对相似三角形。如果你能够回想起高中的几何知识,相似三角形是拥有相同形状但大小不一定相同的三角形。为了证明2个三角形是相似的,必须证明它们的同位角相等,在这里不难做到。角1被两个三角形共享,显然它和自身相等。角2和角3是穿越两条平行线形成的同位角,所以它们是相等的。同时,直角当然是彼此相等的,所以两个三角形是相似的。

            对于相似三角形你应该感兴趣的是它们的每对对应边都是同比例的。你知道沿着z轴的边的长度,它们是n和z。那意味着其他对应边的比例也是n/z。所以,考虑下你知道了什么。根据勾股定理,从(x, y, z)相对于z轴做的垂线具有以下长度:

            

            如果你知道了从你的投影点到z轴的垂线的长度,那么你就可以计算出该点的x和y坐标。长度怎么求?那太简单了!因为你有了相似三角形,所以长度就是简单的L乘以n/z:

            

             因此,x坐标是x * n/z,y坐标是y * n/z。第一步做完了。

            第二步只是简单的执行你上一部分做的同样的映射,所以是时候回顾下你在正交投影中学习到的推导公式了。回想下把x和y坐标映射到规范视域体,像这样:

            

            现在你可以再次调用这些公式,除非你要考虑到投影;所以,把x用x * n/z代替,把y用y * n/z代替:

            

            现在,通过乘以z:

            

            这些结果有点奇怪。为了把这些等式写进矩阵,你需要把它们写成这种形式:

            

            但很明显,现在还做不到,所以现在看起来进入了僵局。应该做什么呢?如果你能找到个办法获得z'z的公式就像x'z和y'z那样,你就可以写一个变换矩阵把(x, y, z)映射到(x'z, y'z, z'z)。然后,你只需要把各部分除以点z,你就会得到你想要的(x', y', z')。

            因为你知道z到z'的转换不依赖于x和y,你知道你想要一个公式形如z'z= pz + q,p和q是常量。并且,你可以很容易的找到那些常量,因为你知道在两种特殊情况下如何得到z': 因为你要把[n, f]映射到[0, 1],你知道当z=n时z'=0,和z=f时z'=1。当你把第一组值代入z'z = pz + q,你可以解得:

            

            现在,把第二组值代入,得到:

            

            把q的值代入等式,你可以很容易的解得p:

            

            现在你有p的值了,并且刚刚你求得了q= –pn,所以你可以解得q:

            

            最后,把p和q的表达式代入最原始的公式中,得:

            

            你就快完成了,但是你处理这个问题的不寻常的性质需要你也处理齐次坐标w。通常情况下,只是简单的设置w' = 1 ——你可能已经注意到在一个基本的变换下最后一行总是[0, 0, 0, 1]---但是现在你在为点(x'z, y'z, z'z, w'z)写一个变换。所以取而代之的,把w' = 1写成w'z = z。因此最后用于透视投影的等式如下:

            

            现在,当你把这个等式写成矩阵的形式,得到:

            当你把这个矩阵用于点(x, y, z,1),它将产生(x'z, y'z, z'z, w'z)。然后,你应用通常的步骤去除以齐次坐标,得到(x', y', z', 1)。那就是透视投影。Direct3D的D3DXMatrixPerspectiveOffCenterLH()方法也实现了上述公式。正如正交投影,如果你假设视域体是对称的并且中心是z轴(也就是r = -l,t = -b),你可以简单的用视域体的宽w和高h改写矩阵中的各项:

            Direct3D的D3DXMatrixPerspectiveLH()方法也生成这个矩阵。

            最后,还有个经常用的上的透视投影的表示。在这种表示中,你根据摄像机的可视范围定义视域体,而不用去担心视域体的尺寸。此概念参阅图6:

    图6: 视域体的高由垂直可视范围的角度a定义

            垂直可视范围的角度是a。这个角度被z轴一分为二,所以根据基本的三角函数,你可以写下面的方程,关联a和近平面n以及屏幕高度h:

            

            这个表达式可以取代投影矩阵中的高度。此外,使用横纵比r代替宽度,r定义为显示区域的宽比高的横纵比。所以,得到:

            

            因此,有了用垂直可视范围角度a和横纵比r构成的透视投影矩阵:

            在Direct3D中,你可以使用D3DXMatrixPerspectiveFovLH()方法得到这种形式的矩阵。这种形式特别有用,因为你可以直接把r设置成渲染窗口的横纵比,并且可视范围角度为p / 4比较好。所以,你真正需要担心的事情只是定义视域体沿着z轴的范围。

     

            总结

            这就是所有的你需要的投影变换背后的数学概念。还有一些其他的不太常用的投影方法,并且如果你使用右手坐标系或者一个不同的规范视域体就会和我们讨论的有点不同,但是以本文的结论作为基础你应该很容易能够推导出那些公式。如果你想知道更多的关于投影或者其他变换的信息,看一看Tomas Moller和Eric Haines的Real-Time Rendering,或者James D. Foley, Andries van Dam, Steven K. Feiner和John F.Hughes的Computer Graphics: Principles and Practice;这两本是优秀的关于计算机图形的书。

            如果你对本文有任何问题,或者需要指出任何需要更正的地方,你可以通过CodeGuru论坛联系我,我的名字是Smasher/Devourer。

            Happy coding!

    展开全文
  • 向量投影与向量投影矩阵

    万次阅读 2018-12-03 21:03:11
    向量投影与向量投影矩阵 向量投影 以下是向量a在向量b上的投影,θ 为两向量的夹角。 其中a = a||+a⊥,a||则是a在b上的投影。 所以投影公式如下: 向量投影矩阵 将以上投影公式写成矩阵形式,...

    向量投影与向量投影矩阵

    向量投影

    以下是向量a在向量b上的投影,θ 为两向量的夹角。

     

    其中a = a||+a⊥,a||则是a在b上的投影。

     

     

     

    所以投影公式如下:

    向量投影矩阵

    将以上投影公式写成矩阵形式,这里使用的是列优先的矩阵,即向量写成一列多行。

     

    因为矩阵相乘符和结合律,所以:

    是一个矩阵,如果是二维向量则是2*2的矩阵,如果是三维向量则是一个3*3的矩阵,这个也就是向量投影矩阵。

    将向量投影矩阵记作P,则:

    P矩阵有些特性,首先P矩阵是一个对称矩阵,所以转置矩阵PT = P。其次如果一个向量在另一个向量上进行多次投影,其结果相等的,所以P^2 = P

    也就有 PT = P = P^2 = P^3 = … = P^n

     

    参考:

    https://blog.csdn.net/williamgavin/article/details/77427164

    《3D数学基础:图形与游戏开发》—— 5.10.3

    展开全文
  • 使用投影矩阵控制七色珠经典例子 计算机显示器是一个二维表面。由OpenGL渲染的3D场景必须作为2D图像投影到计算机屏幕上。投影变换采用glu投影矩阵。首先,它将所有顶点数据从眼睛坐标转换为剪辑坐标。然后,通过与...
  • 模型矩阵、视图矩阵、投影矩阵

    千次阅读 2019-07-30 23:41:24
    总而言之,模型视图投影矩阵=投影矩阵×视图矩阵×模型矩阵,模型矩阵将顶点从局部坐标系转化到世界坐标系中,视图矩阵将顶点从世界坐标系转化到视图坐标系下,而投影矩阵将顶点从视图坐标系转化到规范立方体中。...
  • 投影矩阵、视口矩阵推导过程
  • 3D 投影矩阵学习1.pdf

    2021-09-13 14:10:35
    3D 投影矩阵学习1.pdf
  • 3D投影矩阵学习1.pdf

    2021-08-27 10:36:48
    3D投影矩阵学习1.pdf
  • 投影矩阵的使用”中的源代码,没看过这文章的请不要下载,可能对你没有用
  • 投影矩阵(投影变换)解惑

    千次阅读 2017-09-15 18:48:05
    投影矩阵的推导曾经让我困惑了很久,反思可能是自己数学知识的浅薄,所以很多大神写的关于投影矩阵的推导很明晰还是看不懂,好在经过两周的努力学习和思考,终于弄明白了这个问题,特此做一个总结和大家分享一下,...
  • OpenGL之利用模型视图矩阵和投影矩阵让球体自动旋转.pdf
  • 使用优化投影矩阵的自适应压缩感知
  • 我一直看的是根据两组二维坐标求基础矩阵(也就是F矩阵),可是今天看了一个源码,是根据一组二维坐标和一组三维坐标求投影矩阵(好像叫DLT标定法)。那到底是应该先求投影矩阵再根据投影矩阵求内参,外参,还是先求...
  • 【OpenGL】正交投影和透视投影矩阵(二) —— 结合OpenGL代码验证
  • 投影矩阵(Projection Matrix)

    千次阅读 2019-05-12 13:18:30
    投影矩阵(Projection Matrix)
  • three.js中模型矩阵、视图矩阵和投影矩阵 在学习three.js 中 shader 的时候总是被各种矩阵所迷惑,不知所措。 变换与坐标系: 模型矩阵视图矩阵投影矩阵本地坐标系世界坐标系视图坐标系裁剪坐标系 所以常见的...
  • 证明了秩为k的正交投影矩阵,一定存在k阶主子阵,其Rayleigh商有一个正的下界.证明中综合使用了矩阵的奇异值、特征值、范数之间的优超关系以及酉矩阵和复合矩阵的性质,为进一步揭示正交投影矩阵的性质提供了一种...
  • 投影矩阵推导

    千次阅读 2015-08-04 18:41:39
    概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。 投影是通过一个4x4的...
  • 之前需要获取Shader里面的V、P矩阵,就是观察矩阵和投影矩阵,之前一直想的是从Shader吧数据传给C#脚本,就是从GPU到CPU传数据,但是这样是不对的,GPU中的数据也是CPU传过去的,在Unity的脚本里面可以直接使用...
  • 需要电子档书籍可以Q群:828202939 希望可以和大家一起学习、一起进步!...上一节课我们学习了 透视投影矩阵之不同位置的彩色三角形 这一节课我们将学习 模型矩阵、视图矩阵、投影矩阵融合 上节课我们学...
  • 26 WebGL的透视投影矩阵

    千次阅读 2017-06-02 12:03:13
    而这一节的透视投影矩阵,更符合我们正常人的视觉,也是就近大远小的感觉。我们需要实现的效果就是同样大小的图形,距离视点越远,展现出来就越小,如图:上面案例图片的感觉就达到了近大远小的深度感,那我们如何...
  • 15投影矩阵.pdf_电子版_pdf版
  • CT重建中投影矩阵模型
  • 投影矩阵的使用

    千次阅读 2017-12-19 10:51:52
    opencv3.0中有一个函数 triangulatePoints 可以用两个投影矩阵和匹配点来得到 3D点 现在就用这个函数来重建,相当于一个简易的 pmvs。  先写一个流程: 1。在visualize下读入两个图(已经崎变校正过的) 2...
  • opengl 投影矩阵

    千次阅读 2014-05-21 11:29:09
    投影矩阵的推导 (OpenGL D3D)   (2012-12-17 13:16:14) 标签:  杂谈 分类: OpenGL OpenGL矩阵推导——模型视图变化 在三维编程中,模型视图变换是从三维世界到二...
  • 传统的投影矩阵算法复杂度较高,计算效率低。为此,提出一种基于二维检索的投影矩阵算法。采用类似于矩阵中各元素位置的表示方式,分别用行和列2个维度定位一个投影矩阵的元素,行和列计算较为简单,能够同时进行,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,678
精华内容 24,671
关键字:

投影矩阵