【重拾数学知识】矢量的点乘和叉乘
前言
在科学与工程中,数学是理解和解决问题的基础。矢量作为一种重要的数学工具,广泛应用于物理、计算机科学和工程等领域。本文将探讨矢量的两种基本运算:点乘和叉乘,并提供Python代码示例,帮助读者更好地理解这些概念。
什么是点乘
点乘(又称内积)是两个矢量的代数运算,结果是一个标量。
定义
对于两个矢量 A = ( a 1 , a 2 , a 3 ) \mathbf{A} = (a_1, a_2, a_3) A=(a1,a2,a3) 和 B = ( b 1 , b 2 , b 3 ) \mathbf{B} = (b_1, b_2, b_3) B=(b1,b2,b3),它们的点乘计算公式为:
A ⋅ B = a 1 b 1 + a 2 b 2 + a 3 b 3 \mathbf{A} \cdot \mathbf{B} = a_1 b_1 + a_2 b_2 + a_3 b_3 A⋅B=a1b1+a2b2+a3b3
几何意义
点乘的几何意义为:
A
⋅
B
=
∣
A
∣
∣
B
∣
cos
(
θ
)
\mathbf{A} \cdot \mathbf{B} = |\mathbf{A}| |\mathbf{B}| \cos(\theta)
A⋅B=∣A∣∣B∣cos(θ)
其中,
∣
A
∣
|\mathbf{A}|
∣A∣ 和
∣
B
∣
|\mathbf{B}|
∣B∣ 分别为矢量的模,
θ
\theta
θ 为它们之间的夹角。
推导过程
-
设 A \mathbf{A} A 和 B \mathbf{B} B 的模分别为:
∣ A ∣ = a 1 2 + a 2 2 + a 3 2 |\mathbf{A}| = \sqrt{a_1^2 + a_2^2 + a_3^2} ∣A∣=a12+a22+a32
∣ B ∣ = b 1 2 + b 2 2 + b 3 2 |\mathbf{B}| = \sqrt{b_1^2 + b_2^2 + b_3^2} ∣B∣=b12+b22+b32 -
根据余弦定理,得出:
cos ( θ ) = A ⋅ B ∣ A ∣ ∣ B ∣ \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{|\mathbf{A}| |\mathbf{B}|} cos(θ)=∣A∣∣B∣A⋅B -
整理得:
A ⋅ B = ∣ A ∣ ∣ B ∣ cos ( θ ) \mathbf{A} \cdot \mathbf{B} = |\mathbf{A}| |\mathbf{B}| \cos(\theta) A⋅B=∣A∣∣B∣cos(θ)
什么是叉乘
叉乘(又称外积)是两个矢量的运算,结果是一个新的矢量,且与原来的两个矢量都垂直。
定义
对于两个矢量 A = ( a 1 , a 2 , a 3 ) \mathbf{A} = (a_1, a_2, a_3) A=(a1,a2,a3) 和 B = ( b 1 , b 2 , b 3 ) \mathbf{B} = (b_1, b_2, b_3) B=(b1,b2,b3),它们的叉乘计算公式为:
A × B = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{A} \times \mathbf{B} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} A×B= ia1b1ja2b2ka3b3
计算结果
经过行列式计算,叉乘的结果为:
A
×
B
=
(
a
2
b
3
−
a
3
b
2
,
a
3
b
1
−
a
1
b
3
,
a
1
b
2
−
a
2
b
1
)
\mathbf{A} \times \mathbf{B} = (a_2 b_3 - a_3 b_2, a_3 b_1 - a_1 b_3, a_1 b_2 - a_2 b_1)
A×B=(a2b3−a3b2,a3b1−a1b3,a1b2−a2b1)
几何意义
叉乘的几何意义为:
∣
A
×
B
∣
=
∣
A
∣
∣
B
∣
sin
(
θ
)
|\mathbf{A} \times \mathbf{B}| = |\mathbf{A}| |\mathbf{B}| \sin(\theta)
∣A×B∣=∣A∣∣B∣sin(θ)
其中,
θ
\theta
θ 为两个矢量之间的夹角。
推导过程
-
设 ∣ A ∣ |\mathbf{A}| ∣A∣ 和 ∣ B ∣ |\mathbf{B}| ∣B∣ 分别为:
∣ A ∣ = a 1 2 + a 2 2 + a 3 2 |\mathbf{A}| = \sqrt{a_1^2 + a_2^2 + a_3^2} ∣A∣=a12+a22+a32
∣ B ∣ = b 1 2 + b 2 2 + b 3 2 |\mathbf{B}| = \sqrt{b_1^2 + b_2^2 + b_3^2} ∣B∣=b12+b22+b32 -
根据正弦定理,得出:
∣ A × B ∣ = ∣ A ∣ ∣ B ∣ sin ( θ ) |\mathbf{A} \times \mathbf{B}| = |\mathbf{A}| |\mathbf{B}| \sin(\theta) ∣A×B∣=∣A∣∣B∣sin(θ)
点乘与叉乘的区别
-
结果类型:
- 点乘的结果是标量。
- 叉乘的结果是矢量。
-
几何意义:
- 点乘反映了两个矢量之间的夹角的余弦关系。
- 叉乘反映了两个矢量之间的夹角的正弦关系,并且结果矢量垂直于原来的两个矢量。
Python代码实现
使用NumPy实现
import numpy as np
# 定义两个矢量
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
# 计算点乘
dot_product = np.dot(A, B)
print("点乘结果:", dot_product)
# 计算叉乘
cross_product = np.cross(A, B)
print("叉乘结果:", cross_product)
# 矩阵的点乘
matrix_A = np.array([[1, 2], [3, 4]])
matrix_B = np.array([[5, 6], [7, 8]])
matrix_dot_product = np.dot(matrix_A, matrix_B)
print("矩阵点乘结果:\n", matrix_dot_product)
运行结果:
点乘结果: 32
叉乘结果: [-3 6 -3]
矩阵点乘结果:
[[19 22]
[43 50]]
使用PyTorch实现
import torch
# 定义两个矢量
A = torch.tensor([1.0, 2.0, 3.0])
B = torch.tensor([4.0, 5.0, 6.0])
# 计算点乘
dot_product = torch.dot(A, B)
print("点乘结果:", dot_product.item())
# 计算叉乘
cross_product = torch.cross(A, B)
print("叉乘结果:", cross_product)
# 矩阵的点乘
matrix_A = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
matrix_B = torch.tensor([[5.0, 6.0], [7.0, 8.0]])
matrix_dot_product = torch.mm(matrix_A, matrix_B)
print("矩阵点乘结果:\n", matrix_dot_product)
运行结果:
点乘结果: 32.0
叉乘结果: tensor([-3., 6., -3.])
矩阵点乘结果:
tensor([[19., 22.],
[43., 50.]])
内容小结
- 点乘(又称内积)是两个矢量的代数运算,结果是一个标量。
- 叉乘(又称外积)是两个矢量的运算,结果是一个新的矢量,且与原来的两个矢量都垂直。
- Python中可以使用NumPy和PyTorch库来实现矢量的点乘和叉乘。