关于矩阵

孤街浪徒 提交于 2020-03-21 22:42:27

本章所写都是通过对《工程学线性代数》和《3D数学基础:图形与游戏开发》理解所写

“不幸的是,没人告诉您矩阵像什么——您必须自己去感受。” 来自《黑客帝国》对白 .我们曾宣称矩阵表达坐标转换,多以当我们观察矩阵的时候,我们是在观察转换,观察新的坐标系。打这个转换开起来像什么?特定的3D矩阵(旋转,放射等)和3X3矩阵的9个数字之间有什么关系?怎么样构建一个矩阵来做这个转换(而不是盲目的照搬书上的公式)?——3D数学基础

 

矩阵分为实矩阵和复矩阵,元素是实数的矩阵为实矩阵,元素是复数的为复矩阵。

关于复数:http://www.cnblogs.com/ThreeThousandBigWorld/archive/2012/07/21/2602588.html

单位矩阵我们记做E

转置矩阵:

用 ' 表示转置因为右上角的小t打不出来,a为实数

1)(A')' = A;

2) (A+B)' = A' + B';

3) (aA)' = aA';

4) (AB)' = B'A'.

由n阶方阵A的元素所构成的行列式(个元素的位置不变),称为方阵A的行列式,记做|A|或detA

1)|A'| = |A|

2) |aA| = a^n|A|

3) |AB| = |A||B|

伴随矩阵:

行列式|A|的各个元素的代数余子式Aij所构成的矩阵然后再转置就是矩阵A的伴随矩阵记做A*

AA* = A*A = |A|E  这个定理与后面的逆矩阵相关

逆矩阵:

设X,Y,A皆为矩阵,他们之间的关系为 Y= AX

以A的伴随矩阵A* 左乘上式的两端,并根据伴随矩阵公式,可得

A*Y = A*AX

化简地:

A*Y = |A|X

当|A| ≠ 0时,可解出

X = (1/|A|)A*Y

记做B = (1/|A|)A*,上式可记做

X= BY表示一个从Y到X的线性变换,称为X到Y的逆变换

根据 Y= AX 和 X= BY,我们可得

Y = A(BY) = (AB)Y

所以: AB = E, 注:E为单位矩阵

X = B(AX) = (BA)X ,注:矩阵一般不满足乘法交换律

所以: BA = E

由此:我们定义逆矩阵,对于n阶矩阵A,如果有一个n阶矩阵B,使 AB=BA=E,侧说矩阵A式可逆的,并把矩阵B称为A的逆矩阵,简称逆矩阵,记做 A^-1

定理:

1.若矩阵A可逆,则|A| ≠ 0

2.若矩阵|A|≠0,则A可逆,且 A^-1 = (1/|A|)A*

矩阵A的逆矩阵是唯一的,证:若 矩阵B,C都是A的逆矩阵,则有 B = BE = B(AC) = (BA)C = EC = C

结论:

1):若A可逆,则A^-1亦可逆,且(A^-1)^-1 = A

2):若A可逆, 数a≠0,则aA可逆,且(aA)^-1 = (1/a)A^-1

3):若A,B为同阶矩阵且均可逆,AB亦可逆,且 (AB)^-1 = B^-1 A^-1

4):若A可逆,则A'1(A的转置)亦可逆,且(A')^-1 = (A^-1)'     证:A'(A^-1)' = E, (A^-1 A)' = E'=E 所以(A')^-1 = (A^-1)'

当A可逆时,还可以定义:A^0 = E,A^-k = (A^-1)^k 所以 A^aA^b = A^(a+b), (A^a)^b = A^(ab)

 

3 X 3的矩阵:

          | m_11    m_12    m_13 |

[1,0,0] | m_21    m_22    m_23 |  = [ m_11   m_12  m_13]

          | m_31    m_32    m_33 |

 

          | m_11   m_12    m_13 |

[0,1,0] | m_21    m_22    m_23 |  = [ m_21   m_22  m_23]

          | m_31    m_32    m_33 |

 

          | m_11    m_12    m_13 |

[0,0,1] | m_21    m_22    m_23 |  = [ m_31   m_32  m_33]

          | m_31    m_32    m_33 |

  矩阵的每一行都可以解释为转换后的基向量(就是把x轴,y轴变换成上面对应的行).

  对上面的加深,上面3X3矩阵可以定义为一个三维向量空间根据向量空间的定义:如果在向量空间V中取定一个基a1,a2,....an那么V中任一向量x可唯一的表示为 x =K1a1+K2a2+.......+Knan,

数组K1,K2,K3,Kn称为向量x在基a1,a2,....an中的坐标。(很显然就是在向量空间V各个基向量上面的移动量)

  我们知道,在世界坐标系(其实就是最大的向量空间V)中点P(x,y,z)其实是沿着坐标系的各个基向量移动距离的和,P= K1*(1,0,0)+K2*(0,1,0)+K3*(0,0,1)因为坐标系的基坐标是单位向量,所以这里各个方向的移动量K1,K2,K3等于点P中的x,y,z,当然世界坐标系中的任何一点P它的移动量就是它坐标,所以当我们的坐标系改变时就有Q=P.x*(A11,A12,A13)  +  P.y*(A21,A22,A23)  +  P.z*(A31,A32,A33)这里变换后的Q任然是在世界坐标系中的点,这整个过程其实就是沿着某个坐标系(也可说是向量空间)各个基向量移动K1,K2,K3.....Kn个单位后在世界坐标系中的位置。

  特别的,在n维向量空间R^n中去单位向量为基,则以K1,K2,K3....Kn为分量的向量x,可表示为 x = K1e1+K2e2+K3e3+......+Knen,可见向量在基e1,e2,e3,.....en 中的坐标就是该向量的分量。因此e1,e2,e3....en叫做自然基

  我们可以看出如果矩阵A各行都为单位向量时,向量P乘以矩阵A其实就是就是    P.x*(A11,A12,A13)  +  P.y*(A21,A22,A23)  +  P.z*(A31,A32,A33),如此可以看出坐标变换就是P沿着A的各行向量移动之和。

  特别的,如果矩阵各行不是单位向量那么这个矩阵具有缩放性。

     经典例题:

                  在R^3中取定一个基a1,a2,a3,在取一个新基b1,b2,b3,这A=(a1,a2,a3),B=(b1,b2,b3)。求用A表示B的表示式(基变换公式),并求向量在这两个基中的坐标之间的关系式(坐标变换公式)。

          解:

                 A=EA,E=AA^1      注:E为单位矩阵

                 B=EB=AA^-1B

          基变换公式为      B=AP, 其中表示是的系数矩阵P=A^-1B称为从旧基到新基的过渡矩阵。

                设向量X在旧基和新基中的坐标分别为y1,y2,y3和z1,z2,z3,即

                           x=[y1,y2,y3]*A                 x=[z1,z2,z3]*B

    得        [z1,z2,z3] =[y1,y2,y3]*B^-1A

              即:     [z1,z2,z3] =[y1,y2,y3]*P

几种常用的矩阵:一下矩阵矩阵在<3D数学基础>上有详细的几何解释

旋转矩阵:

                 2D :  R(O) =   cos  sin

                                       -sin cos

    

                 3D  :

  1   0      0     cos 0 –sin        cos  sin   0
Rx(O)= 0   cos  sin   Ry(O)= 1    0   0   Rz(O)= –sin   cos  0
  0 –sin   cos     sin 0  cos        0      0     1

 

                 任意轴:

                            推导公式挺麻烦的不写了,注重过程 《3D数学基础:图形与开发》8.2.3章节

                             v` = (v-(vn))cos + (n*v)sin + (vn)n

    n为旋转轴,单位向量,v为变换前的基向量,v`为变换后的基向量。绕n旋转后的 x,y,z为:

                                   x` = (x-(xn))cos + (n*x)sin + (xn)n

          y` = (y-(yn))cos + (n*y)sin + (yn)n

          z` = (z-(zn))cos + (n*z)sin  + (zn)n

                          所以绕任意轴旋转的矩阵为:       

                                       (x-(xn))cos  +  (n*x)sin + (xn)n     

                                       (y-(yn))cos  +  (n*y)sin + (yn)n

                                       (z-(zn))cos  +  (n*z)sin + (zn)n

缩放矩阵:

           如果在各个方向上应用同比例的缩放,并且沿着原点“膨胀”物体,那么就是均匀缩放

           如果需要“挤压”或“拉伸”物体,在不同的方向应用不同的因子即可,这称作非均匀缩放

           如果缩放因子k,|k|<1物体将“变短”; 如果|k|>1,物体“变长”。如果k=0,就是正交投影如果|k|<0就是镜像

     2D  
              S(Kx,Ky) = Kx   0
  0    Ky
   
     3D Kx   0     0
             S(Kx,Ky,Kz) = 0     Ky   0
  0     0    Kz
   

       任意轴:

                 与上面旋转矩阵相似 ,推导公式挺麻烦的不写了,注重过程 《3D数学基础:图形与开发》8.3章节

                 v` = v+(k-1)(vn)n,   n为缩放轴,单位向量,v为缩放向量,k为缩放因子。

n缩放轴单位向量,k缩放因子

     
  1+(k-1)n,x^2 (k-1)n.x*n.y (k-1)n.x*n.z
            R(n,k) = (k-1)n.x*n.y 1+(k-1)n.y^2 (k-1)n.y*n.z
  (k-1)n.z*n.x (k-1)n.z*n.y 1+(k-1)n.z*2

正交投影:

      一般来说,投影意味着降维操作。有一种投影方法是在某个方向上用零做为缩放因子。

这种情况下,所有点都被拉平至垂直的轴(2D)或平面(3D)上。这种类型的投影称作正交投影

或者平行投影,因为从原来点到投影点的直线互相平行。还有一种投影叫透视投影。

 

 

2D          
  

 X轴上的投影

   

Y轴上的投影

 
    S([0 1],0) = 1    0   S([1 0],0) = 0     0
    0    0     0     1

 

3D                
 

XY平面

   

XZ平面

   

YZ平面

 
    1   0   0     1  0  0     0   0   0
  S([0 0 1],0) = 0   1   0   S([0 1 0],0)= 0  0  0   S([1 0 0],0)= 0   1   0 
    0   0   0     0  0  1     0   0   1

 

 

镜像:

      镜像(也叫作反射)是一种变换,其作用是将物体沿直线(2D中)或平面(3D中)“翻折”。

      利用缩放矩阵和缩放因子(k=-1)很容易实现镜像,设n为2D单位向量,该矩阵将沿通过原点且垂直于n的发射轴来进行镜像变换。

沿任意轴镜像的2D矩阵:

 
                                    S(n,-1)= 1-2*.x^2     -2*n.x*n,y
  -2*n.xn,y      1-2*n.y^2

 

 

       沿任意轴镜像的3D矩阵:

 
  1-2n.x^2     -2n.x*n.y      -2n.x*n.z
                                   S(n,-1)= -2n.x*n.y     1-2n.y^2      -2n.y*n.z
  -2n.x*n.z     -2n.z*n.y      1-2n.z^2

 

切变:

      切变是一种坐标系“扭曲”变换,非均匀的拉伸它。切变的时候角度会发生变化,但面积和体积保持不变。

      切变是一种很少用到的变换,它也被称为扭曲变换

记法Hx的意义是x(或y)坐标根据坐标y(或x)被切变,参数s控制着切变的方向和量。

x` = x + sy

   2D      
             Hx(s)= 1   0                 Hy(s) = 1  s
  s   1   0  1

 

3D中的切变方法是取出一个坐标,乘以不同因子再加到其他两个坐标上。记法Hx的意义是x,y坐标被坐标z改变。

x` = x + sz      y` = y + tz

   3D              
  1   0   0     1   0  0     1   s   t
             Hxy(s,t)= 0   1   0   Hxz(s,t)= s   1  0   Hyz(s,t)= 0   1   0
  s    t   1     0   0  1     0   0   1 

 

矩阵变换的组合:

      矩阵组合是用了矩阵乘法的结合律。

      几何意义根据: 矩阵的行向量就是变换后的基向量。这在多个变换的情况下也成立的。

    

设有矩阵A,B,其中矩阵A行为a1,a2,a3,那么根据矩阵乘法AB,结果中的每一行都是A中相应行与矩阵B相乘的结果。

                

 

         

                  A =
a1
a2
a3

        A*B=
a1
a2   *  B
a3
        a1  *  B
  =    a2  *  B
        a3  *  B
         

 

变换分类:

 

线性变换:

F(a+b) = F(a)+F(b)以及F(ka)=kF(a)

如果满足上式我们就认为是线性变换。

放射变换:

可逆变换:

等角变换:

正交变换:

刚体变换:

 

 

正交矩阵:

     若果方阵M是正交的,则当且仅当M与他的转置矩阵M^t的乘积等于单位矩阵。

     M正交<=>MM^t  = I    I为单位矩阵

     我们知道MM^-1 = I  所以如果M正交那么 M^-1 = M^t  M的逆矩阵等于M的转置矩阵

     当且仅当一个向量是单位向量时,他与她自身的点积结果是1,当且仅当两个向量互相垂直时,他们的点积为零。

     如果一个矩阵是正交的它必须满足:

     矩阵的每一行都是单位矩阵。

     矩阵的所有行互相垂直。

     如果M是正交那么m ^t也是正交.

     例子:旋转矩阵,镜像矩阵是正交矩阵.

矩阵正交化:

    利用施密特正交化:

     

      R1=r1

      R2= r2 – ( (r2 · R1)/(R1 · R1) )R1 

      R3= r3 – ( (r3 · R1)/(R1 · R1) )R1( (r3 · R2)/(R2 · R2) )R2

      现在 R1,R2,R3互相垂直了所以他们是一组正交基,但他们可能不是单位向量所以还要单位化,如果在矫正之前就单位化那就可以避免除法.

      施密特正交化偏差的,这取决于基向量列出的顺序. 改进新:

      R1= r1 – K( (r1 · r2)/(r2 · r2) )r2 -k( (r1 · r3)/(r3 · r3) )r3

      R2= r2 – K( (r2 · r1)/(r1 · r1) )r1 -k( (r2 · r3)/(r3 · r3) )r3

      R3= r3 – K( (r3 · r1)/(r1 · r1) )r1 -k( (r3 · r2)/(r2 · r2) )r2

      要得到完美的结果,就得选择一个适当的因子k并迭代足够多的次数(如,10次).接着进行单位化,最后就会得到一句标准正交基。

4X4齐次矩阵:

  

混合积公式:

|a b c| = a * b · c = -a * c · b

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!