「N-CG」基础 01

1. 矩阵乘法(点乘) & 向量叉乘

1.1. 矩阵点乘(Dot Product)

两个矩阵相乘的条件是:第一个矩阵的列数等于第二个矩阵的行数。

例如,AA 是一个 m×nm \times n 的矩阵,BB 是一个 n×pn \times p 的矩阵,那么 ABA \cdot B 的结果是一个 m×pm \times p 的矩阵。

这里的nn就是需要相等的那个维度。

1.1.1. 应用

点积常用于:

  1. 计算两个向量的夹角;
  2. 计算两个向量的投影;
  3. 计算功率;
  4. 判断两个向量是否垂直(点积为0则垂直);

1.1.2. 简单例子

假设有两个向量 AABB,分别为:

A=[1234],B=[5678]A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix}

那么,AABB 的点乘结果为:

AB=[1×5+2×71×6+2×83×5+4×73×6+4×8]=[19224350]A \cdot B = \begin{bmatrix} 1 \times 5 + 2 \times 7 & 1 \times 6 + 2 \times 8 \\ 3 \times 5 + 4 \times 7 & 3 \times 6 + 4 \times 8 \end{bmatrix} = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}

文字描述的话,就是:
遍历 AA 的行和 BB 的列,将每一行的元素与每一列的元素对应相乘,然后将结果相加,作为新矩阵的元素。最后,用这些元素填充新矩阵。

比如说:用 AA 的第一行和 BB 的第一列相乘,然后将结果相加,作为新矩阵的第一行第一列的元素;用 AA 的第一行和 BB 的第二列相乘,然后将结果相加,作为新矩阵的第一行第二列的元素;以此类推。

1.1.3. 另一个例子

假设有两个向量 AABB,分别为:

A=[123456],B=[789101112]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad B = \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix}

这两个矩阵的形状分别是 2×32 \times 33×23 \times 2,所以它们可以相乘,并且会得到一个 2×22 \times 2 的矩阵。

AB=[1×7+2×9+3×111×8+2×10+3×124×7+5×9+6×114×8+5×10+6×12]=[5864139154]A \cdot B = \begin{bmatrix} 1 \times 7 + 2 \times 9 + 3 \times 11 & 1 \times 8 + 2 \times 10 + 3 \times 12 \\ 4 \times 7 + 5 \times 9 + 6 \times 11 & 4 \times 8 + 5 \times 10 + 6 \times 12 \end{bmatrix} = \begin{bmatrix} 58 & 64 \\ 139 & 154 \end{bmatrix}

1.2. 向量叉乘(Cross Product)

对于二维向量 A=(x1, y1, z1)\vec{A} = (x_1,\ y_1,\ z_1)B=(x2, y2, z2)\vec{B} = (x_2,\ y_2,\ z_2),它们叉乘会产生一个新的向量 C\vec{C},其大小为C=ABsin(<A,B>)|\vec{C}| = |\vec{A}| \cdot |\vec{B}| \cdot \sin(<\vec{A}, \vec{B}>)

两个向量叉乘的结果是一个新的向量,这个新的向量垂直于原来的两个向量。
注意:向量叉乘是丁义珍三维空间中的概念,所以只有三维向量才能进行叉乘

1.2.1. 应用

叉积常用于:

  1. 计算两个向量(或一个平面)的法向量(Normal Vector),也就是垂直于这两个向量的向量;
  2. 判断向量的方向:右手定则;
  3. 计算面积:两个向量的叉积的模长就是这两个向量围成的平行四边形的面积;
  4. 计算力矩;

1.2.2. 简单例子

假设有两个向量 AABB,分别为:

A=(x1, y1, z1),B=(x2, y2, z2)A = (x_1,\ y_1,\ z_1), \quad B = (x_2,\ y_2,\ z_2)

Hint: 向量可以表示为矩阵的形式,比如:A=[x1y1z1]A = \begin{bmatrix} x_1 \\ y_1 \\ z_1 \end{bmatrix}

那么,AABB 的叉乘结果为:(determinant of a 3x3 matrix)

C=A×B=i^j^k^x1y1z1x2y2z2=[y1z2z1y2z1x2x1z2x1y2y1x2]\vec{C} = \vec{A} \times \vec{B} = \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \\ x_1 & y_1 & z_1 \\ x_2 & y_2 & z_2 \end{vmatrix} = \begin{bmatrix} y_1z_2 - z_1y_2 \\ z_1x_2 - x_1z_2 \\ x_1y_2 - y_1x_2 \end{bmatrix}

注意:这里的 i^\hat{i}j^\hat{j}k^\hat{k} 并不是几个值,而是表示单位向量的符号。

或者,可以根据向量AA构建一个特殊的矩阵来计算:

首先,构建矩阵AskewA_{skew}

Askew=[0z1y1z10x1y1x10]A_{skew} = \begin{bmatrix} 0 & -z_1 & y_1 \\ z_1 & 0 & -x_1 \\ -y_1 & x_1 & 0 \end{bmatrix}

这个矩阵是AA的斜对称矩阵(Skew-Symmetric Matrix)。

然后,将AskewA_{skew}与向量BB进行点乘:

C=AskewB=[0z1y1z10x1y1x10][x2y2z2]=[y1z2z1y2z1x2x1z2x1y2y1x2]\vec{C} = A_{skew} \cdot \vec{B} = \begin{bmatrix} 0 & -z_1 & y_1 \\ z_1 & 0 & -x_1 \\ -y_1 & x_1 & 0 \end{bmatrix} \cdot \begin{bmatrix} x_2 \\ y_2 \\ z_2 \end{bmatrix} = \begin{bmatrix} y_1z_2 - z_1y_2 \\ z_1x_2 - x_1z_2 \\ x_1y_2 - y_1x_2 \end{bmatrix}

结果与上面的结果一致。

1.2.3. 小规律

其中的规律:

观察最终形式可以发现,C\vec{C} 的每一行所包含的字母在本行内都是相同的:第一行都是yyzz,第二行都是zzxx,第三行都是xxyy

由于两个向量都是(x, y, z)(x,\ y,\ z)的形式,不妨先想象有这么一串字母:xyzxyzxyzxyz

然后,我们只需要先记住C\vec{C}的第一行,y1z2z1y2y_1z_2 - z_1y_2,的第一项是y1z2y_1z_2xyzxyzx\underline{yz}xyz),那么后面的其他都能按规律推出来了。

已知第一行是y1z2y_1z_2开头,它减去的就是相同字母反过来:z1y2z_1y_2xyzxyzx\underline{yz}xyz),得到第一行为:y1z2z1y2y_1z_2 - z_1y_2

第二行则往后推,xyzxyzxy\underline{zx}yz,得到第二行为:z1x2x1z2z_1x_2 - x_1z_2

第三行同理,xyzxyzxyz\underline{xy}z,得到第三行为:x1y2y1x2x_1y_2 - y_1x_2

这样,就得到了叉乘的结果:

C=[y1z2z1y2z1x2x1z2x1y2y1x2]\vec{C} = \begin{bmatrix} y_1z_2 - z_1y_2 \\ z_1x_2 - x_1z_2 \\ x_1y_2 - y_1x_2 \end{bmatrix}

1.2.4. 另一个例子

假设有两个向量 AABB,分别为:

A=[123],B=[456]A = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}, \quad B = \begin{bmatrix} 4 \\ 5 \\ 6 \end{bmatrix}

那么,AABB 的叉乘结果为:

C=A×B=i^j^k^123456=[2×63×53×41×61×52×4]=[363]\vec{C} = \vec{A} \times \vec{B} = \begin{vmatrix} \hat{i} & \hat{j} & \hat{k} \\ 1 & 2 & 3 \\ 4 & 5 & 6 \end{vmatrix} = \begin{bmatrix} 2 \times 6 - 3 \times 5 \\ 3 \times 4 - 1 \times 6 \\ 1 \times 5 - 2 \times 4 \end{bmatrix} = \begin{bmatrix} -3 \\ 6 \\ -3 \end{bmatrix}

使用构建斜对称矩阵的方法也可以得到相同的结果:

Askew=[032301210]A_{skew} = \begin{bmatrix} 0 & -3 & 2 \\ 3 & 0 & -1 \\ -2 & 1 & 0 \end{bmatrix}

C=AskewB=[032301210][456]=[363]\vec{C} = A_{skew} \cdot \vec{B} = \begin{bmatrix} 0 & -3 & 2 \\ 3 & 0 & -1 \\ -2 & 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} 4 \\ 5 \\ 6 \end{bmatrix} = \begin{bmatrix} -3 \\ 6 \\ -3 \end{bmatrix}

2. 矩阵的转置&逆

矩阵的转置是两个不同的概念。

2.1. 矩阵的转置(Transpose)

矩阵的转置是指:将矩阵的行和列互换。

例如对于以下矩阵AA

A=[123456]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}

它的转置ATA^T为:

AT=[142536]A^T = \begin{bmatrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{bmatrix}

原矩阵中的第nmn行m列的元素变成新矩阵中的第mnm行n列的元素。

2.2. 矩阵的逆(Inverse)

矩阵的逆是指:对于一个矩阵AA,如果存在一个矩阵BB,使得AB=IA \cdot B = IBA=IB \cdot A = I,那么BB就是AA的逆矩阵。

其中,II是单位矩阵,有事也会用EE表示。

例如,一个3×33 \times 3的单位矩阵I3I_3为:

I3=[100010001]I_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}

2.2.1. 矩阵有逆的条件

并不是所有的矩阵都有逆,只有满足以下条件的矩阵才有逆:

  1. 其必须是一个方阵(行数等于列数);
  2. 其行列式(Determinant)不为0。

行列式为0的矩阵是奇异矩阵(Singular Matrix),行列式不为0的矩阵是非奇异矩阵(Non-Singular Matrix)。
一种快速判断奇异矩阵的方法:如果矩阵中存在某一行和另一行存在线性相关的关系(如:第一行是第二行的2倍)的情况,那么这个矩阵就是奇异矩阵。

RECALL:行列式的计算方法:

abcd=adbc\begin{vmatrix} a & b \\ c & d \end{vmatrix} = ad - bc

abcdefghi=a(eifh)b(difg)+c(dheg)\begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix} = a(ei - fh) - b(di - fg) + c(dh - eg)

2.2.2. 矩阵的逆的计算

对于一个2×22 \times 2的矩阵AA

A=[abcd]A = \begin{bmatrix} a & b \\ c & d \end{bmatrix}

它的逆矩阵A1A^{-1}为:

A1=1adbc[dbca]A^{-1} = \frac{1}{ad - bc} \begin{bmatrix} d & -b \\ -c & a \end{bmatrix}

对于一个3×33 \times 3的矩阵AA

A=[abcdefghi]A = \begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix}

它的逆矩阵A1A^{-1}为:

A1=1abcdefghi[eifhchbibfcefgdiaicgcdafdhegbgahaebd]A^{-1} = \frac{1}{\begin{vmatrix} a & b & c \\ d & e & f \\ g & h & i \end{vmatrix}} \begin{bmatrix} ei - fh & ch - bi & bf - ce \\ fg - di & ai - cg & cd - af \\ dh - eg & bg - ah & ae - bd \end{bmatrix}

使用numpy库可以很方便地计算矩阵的逆,如:np.linalg.inv(A)


「N-CG」基础 01
https://siriusahu.github.io.git/2024/02/05/N-CG-Basic01/
Author
Sirius Ahu
Posted on
February 5, 2024
Licensed under