1. 矩阵乘法(点乘) & 向量叉乘
1.1. 矩阵点乘(Dot Product)
两个矩阵相乘的条件是:第一个矩阵的列数等于第二个矩阵的行数。
例如,A 是一个 m×n 的矩阵,B 是一个 n×p 的矩阵,那么 A⋅B 的结果是一个 m×p 的矩阵。
这里的n就是需要相等的那个维度。
1.1.1. 应用
点积常用于:
- 计算两个向量的夹角;
- 计算两个向量的投影;
- 计算功率;
- 判断两个向量是否垂直(点积为0则垂直);
1.1.2. 简单例子
假设有两个向量 A 和 B,分别为:
A=[1324],B=[5768]
那么,A 和 B 的点乘结果为:
A⋅B=[1×5+2×73×5+4×71×6+2×83×6+4×8]=[19432250]
文字描述的话,就是:
遍历 A 的行和 B 的列,将每一行的元素与每一列的元素对应相乘,然后将结果相加,作为新矩阵的元素。最后,用这些元素填充新矩阵。
比如说:用 A 的第一行和 B 的第一列相乘,然后将结果相加,作为新矩阵的第一行第一列的元素;用 A 的第一行和 B 的第二列相乘,然后将结果相加,作为新矩阵的第一行第二列的元素;以此类推。
1.1.3. 另一个例子
假设有两个向量 A 和 B,分别为:
A=[142536],B=791181012
这两个矩阵的形状分别是 2×3 和 3×2,所以它们可以相乘,并且会得到一个 2×2 的矩阵。
A⋅B=[1×7+2×9+3×114×7+5×9+6×111×8+2×10+3×124×8+5×10+6×12]=[5813964154]
1.2. 向量叉乘(Cross Product)
对于二维向量 A=(x1, y1, z1) 和 B=(x2, y2, z2),它们叉乘会产生一个新的向量 C,其大小为∣C∣=∣A∣⋅∣B∣⋅sin(<A,B>)。
两个向量叉乘的结果是一个新的向量,这个新的向量垂直于原来的两个向量。
注意:向量叉乘是丁义珍三维空间中的概念,所以只有三维向量才能进行叉乘。
1.2.1. 应用
叉积常用于:
- 计算两个向量(或一个平面)的法向量(Normal Vector),也就是垂直于这两个向量的向量;
- 判断向量的方向:右手定则;
- 计算面积:两个向量的叉积的模长就是这两个向量围成的平行四边形的面积;
- 计算力矩;
1.2.2. 简单例子
假设有两个向量 A 和 B,分别为:
A=(x1, y1, z1),B=(x2, y2, z2)
Hint: 向量可以表示为矩阵的形式,比如:A=x1y1z1。
那么,A 和 B 的叉乘结果为:(determinant of a 3x3 matrix)
C=A×B=i^x1x2j^y1y2k^z1z2=y1z2−z1y2z1x2−x1z2x1y2−y1x2
注意:这里的 i^、j^、k^ 并不是几个值,而是表示单位向量的符号。
或者,可以根据向量A构建一个特殊的矩阵来计算:
首先,构建矩阵Askew:
Askew=0z1−y1−z10x1y1−x10
这个矩阵是A的斜对称矩阵(Skew-Symmetric Matrix)。
然后,将Askew与向量B进行点乘:
C=Askew⋅B=0z1−y1−z10x1y1−x10⋅x2y2z2=y1z2−z1y2z1x2−x1z2x1y2−y1x2
结果与上面的结果一致。
1.2.3. 小规律
其中的规律:
观察最终形式可以发现,C 的每一行所包含的字母在本行内都是相同的:第一行都是y和z,第二行都是z和x,第三行都是x和y。
由于两个向量都是(x, y, z)的形式,不妨先想象有这么一串字母:xyzxyz。
然后,我们只需要先记住C的第一行,y1z2−z1y2,的第一项是y1z2(xyzxyz),那么后面的其他都能按规律推出来了。
已知第一行是y1z2开头,它减去的就是相同字母反过来:z1y2(xyzxyz),得到第一行为:y1z2−z1y2。
第二行则往后推,xyzxyz,得到第二行为:z1x2−x1z2。
第三行同理,xyzxyz,得到第三行为:x1y2−y1x2。
这样,就得到了叉乘的结果:
C=y1z2−z1y2z1x2−x1z2x1y2−y1x2
1.2.4. 另一个例子
假设有两个向量 A 和 B,分别为:
A=123,B=456
那么,A 和 B 的叉乘结果为:
C=A×B=i^14j^25k^36=2×6−3×53×4−1×61×5−2×4=−36−3
使用构建斜对称矩阵的方法也可以得到相同的结果:
Askew=03−2−3012−10
C=Askew⋅B=03−2−3012−10⋅456=−36−3
2. 矩阵的转置&逆
矩阵的转置
和逆
是两个不同的概念。
2.1. 矩阵的转置(Transpose)
矩阵的转置是指:将矩阵的行和列互换。
例如对于以下矩阵A:
A=[142536]
它的转置AT为:
AT=123456
原矩阵中的第n行m列的元素变成新矩阵中的第m行n列的元素。
2.2. 矩阵的逆(Inverse)
矩阵的逆是指:对于一个矩阵A,如果存在一个矩阵B,使得A⋅B=I且B⋅A=I,那么B就是A的逆矩阵。
其中,I是单位矩阵,有事也会用E表示。
例如,一个3×3的单位矩阵I3为:
I3=100010001
2.2.1. 矩阵有逆的条件
并不是所有的矩阵都有逆,只有满足以下条件的矩阵才有逆:
- 其必须是一个方阵(行数等于列数);
- 其行列式(Determinant)不为0。
行列式为0的矩阵是奇异矩阵(Singular Matrix),行列式不为0的矩阵是非奇异矩阵(Non-Singular Matrix)。
一种快速判断奇异矩阵的方法:如果矩阵中存在某一行和另一行存在线性相关的关系(如:第一行是第二行的2倍)的情况,那么这个矩阵就是奇异矩阵。
RECALL:行列式的计算方法:
acbd=ad−bc
adgbehcfi=a(ei−fh)−b(di−fg)+c(dh−eg)
2.2.2. 矩阵的逆的计算
对于一个2×2的矩阵A:
A=[acbd]
它的逆矩阵A−1为:
A−1=ad−bc1[d−c−ba]
对于一个3×3的矩阵A:
A=adgbehcfi
它的逆矩阵A−1为:
A−1=adgbehcfi1ei−fhfg−didh−egch−biai−cgbg−ahbf−cecd−afae−bd
使用numpy
库可以很方便地计算矩阵的逆,如:np.linalg.inv(A)
。