发散是物理、数学和生物学等许多领域中使用的最关键的术语。发散这个词代表从一个点的分离或移动。分歧也可以是两条或多条线相互远离的点。
在向量微积分中,散度是一个术语,用于表示分量或场如何彼此靠近或远离。或者它也可以测量物体之间的距离。
散度通常被视为返回标量场作为输出的向量场。矢量场是一个具有与之相关的数量和方向的场,而标量只有一个数量。日常差异的一个例子是水龙头的水流。
理解散度背后的概念取决于每个分量的偏导数,然后对导数求和。
有一个名为“sympy”的模块可用于处理微积分。
我们可以使用 Python 计算向量场的散度。我们可以使用“scipy”库,它有一个专门用于发散的方法。我们还可以使用 Numpy 库手动计算散度。
让我们浏览 Numpy 库并学习如何使用 Numpy 计算散度。
Numpy 库
Numpy 代表数值Python。它主要与数组一起工作,流行的pandas库也是基于这个库构建的。它的开发主要是为了将 C 和 Fortran 等语言的计算能力引入 Python。
它有许多内置方法可用于线性代数、傅里叶变换、值分解等等。
向量场与 np.gradient 的散度
Numpy库的梯度法用于计算数组的二阶导数。该方法的语法如下。
numpy.gradient(f, * varargs, axis = None , edge_order = 1 ) |
让我们看看该方法的参数。
f
:此参数采用数组或类似数组的对象作为输入。
varags
:是一个参数,用于包含确定输入数组中每个维度的间距的变量参数。
axis
:我们可以指定要计算梯度的轴。
edge_order
:使用边界处的 N 阶精确差来计算梯度。默认值为 1。
让我们看看计算散度的代码。我们将计算典型矢量场的散度 – (2y^2+x-4)i+cos(x)j
。该场的散度是常数,为1。我们可以通过对向量进行偏导来求出散度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np def F_x(x, y): return 2 * y * * 2 + x - 4 def F_y(x, y): return np.cos(x) x = np.linspace( - 1 , 1 , 5 ) y = np.linspace( - 1 , 1 , 5 ) X, Y = np.meshgrid(x, y) F_X = F_x(X, Y) F_Y = F_y(X, Y) dFX = np.gradient(F_X, x, axis = 1 ) dFY = np.gradient(F_Y, y, axis = 0 ) div = dFX + dFY print (div) |
在第一行中,我们将 numpy 库导入为 np.
我们正在创建两个函数F_x
snd F_y
,其中 F 是我们决定的向量场。F_x
存储字段的第一个分量 – (2y^2+x-4),`F_y 存储另一个分量 cos(x)。
linspace
我们正在使用检查字段散度的方法创建一个包含 -1 到 1 之间 5 个值的网格。并且不建议按原样计算矢量场的散度。
我们正在使用该函数计算各个分量的梯度np.gradient
。结果分别存储在dFX
和中dFY
。
这些分量相加在一起,结果存储在一个名为 div 的变量中,这就是域的散度。
有一种更简单的方法可以使用相同的方法完成相同的事情。我们可以直接计算梯度,而不是划分场的分量。
import numpy as np def compute_div(F, x, y): par_x = np.gradient(F[0], x, axis=0) par_y = np.gradient(F[1], y, axis=1) div = par_x + par_y return div x = np.linspace(-10, 10,5) y = np.linspace(-10, 10,5) X, Y = np.meshgrid(x, y, indexing='ij') F = [ 2 * Y**2 + X - 4, np.cos(X)] divg= compute_div(F, x, y) print("Divergence of the vector field:\n", divg) |
我们正在创建一个名为 的函数compute_div
,它将向量场(F)和轴(x 和 y)作为参数。
我们通过指定分量的索引来直接计算字段的偏导数。例如,分量 2 * y**2 + x – 4 取为 F[0[,另一部分 cos(x) 取为 F[1],用梯度来计算导数。
这些值存储在par_x
和 等变量中par_y
。这些分量的总和存储在名为 div 的变量中。
我们还创建了一个网格来填充场的分歧。F 存储我们使用的向量场。使用相应的值调用该函数compute_div
,并将结果存储在 divg 中。
差异打印在下一行中。
结论
我们讨论了向量场的散度以及使用 Numpy 库求向量场散度的方法。
发散用于表示与点的分离或移动。分歧也可以是两条或多条线相互远离的点。分歧的一个例子是从水龙头流出的水或路上离你较远的人。
矢量场具有方向和值,而标量具有数量。Divergence 采用向量场并返回标量。
我们使用 Numpy 库的梯度方法来计算 2D 矢量场的散度。您可以使用相同的方法并使用您自己的向量场来计算散度。如果您使用 3D 矢量场(也有 k 个分量),您只需添加另一个变量来计算该分量的偏导数,然后将所有三个相加。