外积,叉乘,矩阵乘法
外积,叉乘,矩阵乘法
在slam中,我们经常会遇到需要处理一些矩阵相乘的问题,例如我们在计算两个点的外积时,就需要算两个向量的叉乘,叉乘在计算机计算中比较麻烦,我们一般都是通过将其中一个向量转换成为一个反对称矩阵然后与另外一个进行矩阵乘法来解决的。
叉乘:
首先定义A ,B :
\[A = (a_1,a_2,a_3)\\B=(b_1,b_2,b_3)
\]
叉乘为:
\[A \times B
=\begin{bmatrix}
i & j & k \\
a_1 & a_2 & a_3 \\
b_1 & b_2 & b_3 \\
\end{bmatrix}
\]
叉乘结果:
\[A \times B = (a_2 \cdot b_3 - a_3 \cdot b_2) \mathbf{i} - (a_1 \cdot b_3 - a_3 \cdot b_1) \mathbf{j} + (a_1 \cdot b_2 - a_2 \cdot b_1) \mathbf{k}
\]
矩阵乘法:
一个向量可以转换成一个反对称矩阵,这样可以在一定程度上避免直接进行叉乘运算,而是通过矩阵乘法来完成相同的任务。在三维空间中,任何向量都可以表示成一个3×3的反对称矩阵,这个矩阵与另一个向量进行矩阵乘法的结果,等价于两个向量的叉乘。
给定一个向量\({v} = (v_x, v_y, v_z)\) ,我们可以构造一个相应的反对称矩阵\(V\) 如下:
\[\begin{bmatrix}
0 & -v_z & v_y \\
v_z & 0 & -v_x \\
-v_y & v_x & 0
\end{bmatrix}
\]
这个矩阵的特点是它的转置矩阵等于其自身的负矩阵,即\(\mathbf{V}^T = -\mathbf{V}\) ,这也是“反对称”这个名字的由来。
现在,如果我们有另一个向量\(\mathbf{u} = (u_x, u_y, u_z)\) ,通常情况下,我们可以通过\(\mathbf{v} \times \mathbf{u}\) 来计算它们的叉乘。但是,同样的结果也可以通过矩阵乘法来获得:
\[\mathbf{v} \times \mathbf{u} = \mathbf{V} \cdot \mathbf{u}
\]
其中,矩阵\(\mathbf{V}\) 乘以向量\(\mathbf{u}\) 的结果是:
\[\mathbf{V} \cdot \mathbf{u} =
\begin{bmatrix}
0 & -v_z & v_y \\
v_z & 0 & -v_x \\
-v_y & v_x & 0
\end{bmatrix}
\begin{bmatrix}
u_x \\
u_y \\
u_z
\end{bmatrix}=
\begin{bmatrix}
-v_z u_y + v_y u_z \\
v_z u_x - v_x u_z \\
-v_y u_x + v_x u_y
\end{bmatrix}
\]
这个结果向量正是 \(\mathbf{v} \times \mathbf{u}\)的结果。
使用反对称矩阵代替直接的叉乘有时可以简化数学计算,特别是在涉及多个叉乘或需要将叉乘操作融入更大的线性代数框架时。例如,在计算机图形学、机器人学和控制理论中,反对称矩阵常常被用来表示旋转和处理与旋转有关的计算。