### 梯度、散度和旋度的数学概念解释
#### 梯度
梯度是一个矢量算子,用于描述标量场的变化率。对于给定的一个多变量实值函数 \( f(x,y,z) \),其梯度定义为该函数在某一点处的最大变化率的方向及其大小。具体来说,在直角坐标系下,如果有一个二元或三元可微分函数,则可以按照如下方式求得梯度:
\[ \nabla f =\left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z}\right)^T \]
这里 \( \nabla \) 是哈密顿算符(del),而上标的 T 表示转置操作。
#### 散度
散度用来衡量向量场中某个位置附近通量源强度或者汇合的程度。简单理解就是考察单位体积内的净流出量。在一个三维空间里,假设存在一个连续可微的向量场 \( \mathbf{F}(x, y, z)=(F_x,F_y,F_z) \),那么这个向量场在任意点 P 的散度表达式为:
\[ \operatorname{div} (\mathbf {F})=\nabla \cdot {\mathbf {F}}={\frac {{\partial F_{x}}}{{\partial x}}}+{\frac {{\partial F_{y}}}{{\partial y}}}+{\frac {{\partial F_{z}}}{{\partial z}}} \][^2]
当上述结果大于零时表示此处有正贡献于外流;小于零则意味着此区域内部物质正在聚集形成负源。
#### 旋度
为了更好地阐述旋度这一概念,先提及环量的概念。环量是指速度沿封闭路径积分的结果,在流体动力学领域尤为重要。对于一个位于固定边界 C 上流动着的理想不可压缩液体而言,它的环流量可通过下面公式来计算:
\[ \Gamma = \oint_C \mathbf v \cdot d\mathbf r \]
其中 \( \mathbf v \) 和 \( d\mathbf r \) 分别代表局部线速度以及位移增量。基于这样的背景信息之后再来看待旋度本身:它是表征旋转性质的一种量化指标,反映了围绕特定轴转动的趋势。设有一光滑定向曲面 S 及其边缘 L 组成一对偶结构,并且已知穿过S表面的瞬时流速分布情况,则对应于此系统的平均角动量密度可以通过取极限的方式得到:
\[ \lim _{|L|\to 0}{\frac {1}{|A|}}\iint _{S}({\boldsymbol {\omega }}\times {\hat {\mathbf n}})\;d^{2}r=rot\,\mathbf A \]
这里的 rot 即指代旋度运算符,\( |A| \) 表面积元素,\( \hat{\mathbf{n}} \) 法向单位矢量[^3]。
```python
import numpy as np
from sympy import symbols, diff
# 定义符号变量
x, y, z = symbols('x y z')
def gradient(f):
""" 计算并返回f关于xyz坐标的梯度 """
grad_f = [diff(f, var) for var in (x, y, z)]
return np.array(grad_f)
def divergence(F):
""" 对输入的向量场F=[Fx,Fy,Fz], 返回其散度"""
div_F = sum([diff(component, coord) for component, coord in zip(F, (x, y, z))])
return div_F
def curl(F):
""" 输入向量场F=[Fx,Fy,Fz], 输出对应的curl"""
i,j,k=symbols('i j k')
matrix=[
[i,j,k],
[*map(diff,(F[0],F[1],F[2]),(x,y,z))],
[*[coord.diff()for coord in (x,y,z)]]
]
result=np.linalg.det(np.matrix(matrix))
return list(result.expand().as_coefficients_dict().items())[::3]
```