散度的可视化
flyfish
向量场和散度
假设我们有一个简单的向量场:
F
=
(
x
,
y
,
z
)
\mathbf{F} = (x, y, z)
F=(x,y,z)在这里,向量场
F
\mathbf{F}
F 是由三个分量组成的向量,每个分量是空间坐标
x
x
x、
y
y
y、
z
z
z 的函数:
-
F x = x F_x = x Fx=x
-
F y = y F_y = y Fy=y
-
F z = z F_z = z Fz=z
散度的定义
散度是一个向量场的标量运算,表示向量场在一个点上的“发散”或“汇聚”程度。数学上,散度定义为:
∇
⋅
F
=
∂
F
x
∂
x
+
∂
F
y
∂
y
+
∂
F
z
∂
z
\nabla \cdot \mathbf{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z}
∇⋅F=∂x∂Fx+∂y∂Fy+∂z∂Fz
具体计算过程
对于向量场 F = ( x , y , z ) \mathbf{F} = (x, y, z) F=(x,y,z),我们需要计算其散度。
-
计算 ∂ F x ∂ x \frac{\partial F_x}{\partial x} ∂x∂Fx:
F x = x F_x = x Fx=x, 对 x x x 求偏导数: ∂ F x ∂ x = ∂ x ∂ x = 1 \frac{\partial F_x}{\partial x} = \frac{\partial x}{\partial x} = 1 ∂x∂Fx=∂x∂x=1 -
计算 ∂ F y ∂ y \frac{\partial F_y}{\partial y} ∂y∂Fy:
F y = y F_y = y Fy=y,对 y y y 求偏导数: ∂ F y ∂ y = ∂ y ∂ y = 1 \frac{\partial F_y}{\partial y} = \frac{\partial y}{\partial y} = 1 ∂y∂Fy=∂y∂y=1 -
计算 ∂ F z ∂ z \frac{\partial F_z}{\partial z} ∂z∂Fz:
F z = z F_z = z Fz=z,对 z z z 求偏导数: ∂ F z ∂ z = ∂ z ∂ z = 1 \frac{\partial F_z}{\partial z} = \frac{\partial z}{\partial z} = 1 ∂z∂Fz=∂z∂z=1
解释:
∇
⋅
F
=
∂
F
x
∂
x
+
∂
F
y
∂
y
+
∂
F
z
∂
z
=
1
+
1
+
1
=
3
\nabla \cdot \mathbf{F} = \frac{\partial F_x}{\partial x} + \frac{\partial F_y}{\partial y} + \frac{\partial F_z}{\partial z} = 1 + 1 + 1 = 3
∇⋅F=∂x∂Fx+∂y∂Fy+∂z∂Fz=1+1+1=3
字母和符号的含义
-
∇ ⋅ F \nabla \cdot \mathbf{F} ∇⋅F 表示向量场 F \mathbf{F} F 的散度。
-
F = ( F x , F y , F z ) \mathbf{F} = (F_x, F_y, F_z) F=(Fx,Fy,Fz) 表示向量场的三个分量。
-
F x F_x Fx 是向量场在 x x x 方向的分量。
-
F y F_y Fy 是向量场在 y y y 方向的分量。
-
F z F_z Fz 是向量场在 z z z 方向的分量。
-
∂ F x ∂ x \frac{\partial F_x}{\partial x} ∂x∂Fx 表示 F x F_x Fx 对 x x x 的偏导数。
-
∂ F y ∂ y \frac{\partial F_y}{\partial y} ∂y∂Fy 表示 F y F_y Fy 对 y y y 的偏导数。
-
∂ F z ∂ z \frac{\partial F_z}{\partial z} ∂z∂Fz 表示 F z F_z Fz 对 z z z 的偏导数。
这表明在这个向量场中,任意点的散度都是 3,意味着向量场在每个点都是均匀发散的。
散度(divergence)是向量分析中的一个算子,用来描述向量场在一个点的“发散”或“汇聚”程度。它将一个向量场(矢量场)映射到一个标量场上。具体来说,散度表示在一个微小体元中的向量是“向外”居多还是“向内”居多。
-
正散度 :如果一个点的散度为正,说明该点是一个发源点,向量从这个点向外发散。
-
负散度 :如果一个点的散度为负,说明该点是一个汇聚点,向量在这个点向内汇聚。
可视化
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation, PillowWriter
# 定义向量场 F = (x, y, z)
def vector_field(x, y, z):
return np.array([x, y, z])
# 计算散度
def divergence(x, y, z):
return 3 # 对于 F = (x, y, z),散度为 3
# 创建动画
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.set_zlim(-1, 1)
def update(frame):
ax.clear()
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.set_zlim(-1, 1)
# 绘制向量场
X, Y, Z = np.meshgrid(np.linspace(-1, 1, 5), np.linspace(-1, 1, 5), np.linspace(-1, 1, 5))
U, V, W = vector_field(X, Y, Z)
ax.quiver(X, Y, Z, U, V, W, color='blue', alpha=0.5)
# 绘制中心点
ax.scatter(0, 0, 0, color='red', s=100)
# 显示散度值
div_value = divergence(0, 0, 0)
ax.text2D(0.05, 0.95, f"Divergence at (0, 0, 0): {div_value}", transform=ax.transAxes, color='black')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ani = FuncAnimation(fig, update, frames=100, repeat=True)
writer = PillowWriter(fps=1)
ani.save('divergence_example.gif', writer=writer)
plt.show()