矩阵运算与常用矩阵 agile Posted on Oct 2 2021 优秀博文 > 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [zhuanlan.zhihu.com](https://zhuanlan.zhihu.com/p/362082020) 概念 -- 由 m*n 个数排成的 m 行 n 列的数表称为 m 行 n 列的矩阵,简称 m*n 矩阵。记作:  这 m*n 个数称为矩阵的元素,简称为元,数  位于矩阵  的第 i 行第 j 列,称为矩阵  的 (i, j) 元。 元素是实数的矩阵称为**实矩阵**,元素是复数的矩阵称为**复矩阵**。 若多个矩阵的行数和列数相同,我们称它们为**同型矩阵**。 行数与列数都等于 n 的矩阵称为 **n 阶矩阵或 n 阶方阵**。若多个方阵的行数(行数 = 列数)相同,我们称它们为**同阶矩阵**。 基本运算 ---- 矩阵的加减法和矩阵的数乘合称矩阵的线性运算 ### 加法 只有同型矩阵之间才可以进行加法运算,将两个矩阵相同位置的元相加即可,m 行 n 列的两个矩阵相加后得到一个新的 m 行 n 列矩阵,例如:   **运算律**: 交换律:  结合律:  ### 减法 与加法类似,如下:   ### 数乘 数乘即将矩阵乘以一个常量,矩阵中的每个元都与这个常量相乘,例如:   **运算律**:     ### 转置 把矩阵  的行和列互相交换所产生的矩阵称为 A 的转置矩阵(标记为  ),这一过程称为矩阵的转置。   **运算律**:    ### 共轭 对于一个复数矩阵  ,我们对其做实部不变,虚部取负的操作即为共轭操作,记作  。例如  则  ### 乘法 两个矩阵的乘法仅当第一个矩阵的**列数**和另一个矩阵的**行数**相等时才能定义,_m_×_n_ 矩阵  和 _n_×_p_ 矩阵  相乘,会得到一个 _m_×_p_ 矩阵  ,记为  。  中第 i 行 j 列的元即为:  式子看着很复杂,其实很简单,  **中第 i 行第 j 列的元素的值为:**  **中第 i 行所有元素 与**  **中第 j 列的所有元素一一对应相乘,然后将相乘后的所有值相加**。 例如:  我们看结果中的第一行第二列 1*9+3*0+5*1,不就是前者的第一行 1,3,5 和后者的第二列 9,0,1 互相相乘然后相加。 **运算律**:    不满足交换律,即  例如 1*3 的矩阵乘以 3*1 的矩阵得到的是 1*1 的矩阵(每 n 行乘以每 n 列,左边只有一行,右边只有一列,**向量的点乘**就属于这种情况):  而把它们反过来,即 3*1 的矩阵乘以 1*3 的矩阵,就变成了 3*3 的矩阵:  ### 矩阵与向量相乘 向量用矩阵表示的话,是属于一个 n*1 的矩阵,例如二维向量为  ,三维向量为  因此一个 m * 2 的矩阵可以乘以一个二维向量,m * 3 的矩阵可以乘以一个三维向量。 这点对于**向量的变换运算**非常的重要,例如我们想要将向量 (x, y) 做一个 y 轴的对称操作,即变为 (-x, y) ,只需要用下面的矩阵乘以这个向量即可:  ### 矩阵表示向量的点积  ### 矩阵表示向量的叉积  至于左边这个矩阵怎么来的?可以看后续的三维旋转推导。 ### 哈达玛积 (Hadamard product) 矩阵还有一种运算叫作哈达玛积或者基本积,该运算类似于矩阵的加减法,将两个 m*n 的同阶矩阵  、  的对应位置相乘得到一个 m*n 的新矩阵  ,常记作  或  。 例如:   **运算律**:    \ 常用的特殊的矩阵 -------- ### 单位矩阵 单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为 1,除此以外全都为 0,即  单位矩阵记为  或者  ,通常用  或  表示,例如:   **重要性质**:任何矩阵  乘以单位矩阵  ,或者单位矩阵  乘以任何矩阵  的结果都为  。记作:  或  ### 逆矩阵 设  是一个 n 阶矩阵,若存在另一个 n 阶矩阵  ,使得:  (  为单位矩阵),则称方阵  可逆,并称方阵  是  的逆矩阵。 若矩阵  可逆,则其的逆矩阵是唯一的,记为  ,则  或  。 一些性质: 若  可逆,则  若  可逆,则其转置矩阵  也可逆,且  若  ,  都可逆,则  ### 对角矩阵 当一个方阵上所有非对角线上的元素均为 0 时,即  时  ,该矩阵即为对角矩阵。例如:  它可用于缩放变换,假如我们要将 (x, y) 分别缩放 m 倍和 n 倍,变为 (mx, ny) 那么就可以用下面矩阵来表达:  该对角矩阵也可称为**缩放矩阵**。 ### 正交矩阵 如果有个 n 阶实矩阵  ,它满足  或  ,则称  为正交矩阵,正交矩阵常用字母  来表示。 我们可以发现这和逆矩阵的定义(  )很像,因此正交矩阵的转置等于其逆矩阵,即 。 除此之外,  或  的**各行都是单位向量且两两正交,且各列也都是单位向量且两两正交**。 **推导:** 假设  为正交矩阵,那么  ,可得:  可得 ac+bd=0,aa+bb=cc+dd=1。 若按照  的行来取向量,我们可得到向量  和  。 做点积得  ,前面已得到 ac+bd=0,所以  ,根据正交的定义可得,这两个向量正交。 然后再来取模,可得  ,前面得到 aa+bb=1,因此  的模长为 1,为单位向量,  同理为单位向量。 上面我们验证了  中各行都是单位向量且两两正交,要验证每列也是这样的情况只需要使用  来推导即可。同样的在三维空间也可以用此方法来推导,用 3*3 的矩阵相乘即可。 在坐标系中,我们 x 轴的单位向量为 (1, 0, 0),y 轴为 (0, 1, 0),z 轴为 (0, 0, 1),那么他们所组成的矩阵即为:  它既是单位矩阵,又是正交矩阵。 向量运算与应用 Unity的内存管理与性能优化