向量积分的应用#

要在区域上积分标量场或向量场,我们必须首先定义一个区域。SymPy提供了三种定义区域的方法:

  1. 使用参数方程 ParametricRegion .

  2. 使用隐式方程 ImplicitRegion .

  3. 使用几何模块的对象。

这个 vector_integrate() 函数用于在任何类型的区域上积分标量场或矢量场。它根据对象的性质自动确定集成的类型(直线、曲面或体积)。

我们定义了一个坐标系,并对示例进行了必要的导入。

>>> from sympy import sin, cos, exp, pi, symbols
>>> from sympy.vector import CoordSys3D, ParametricRegion, ImplicitRegion, vector_integrate
>>> from sympy.abc import r, x, y, z, theta, phi
>>> C = CoordSys3D('C')

周长、表面积和体积的计算#

要计算圆的周长,我们需要定义它。让我们用它的参数方程来定义它。

>>> param_circle = ParametricRegion((4*cos(theta), 4*sin(theta)), (theta, 0, 2*pi))

我们也可以用它的隐式方程来定义圆。

>>> implicit_circle = ImplicitRegion((x, y), x**2 + y**2 - 4)

图形的周长等于它在单位标量场上积分的绝对值。

>>> vector_integrate(1, param_circle)
8*pi
>>> vector_integrate(1, implicit_circle)
4*pi

假设用户想要计算三角形的周长。确定三角形的参数表示可能很困难。相反,用户可以使用 Polygon 几何模块。

>>> from sympy.geometry import Point, Polygon
>>> triangle = Polygon(Point(1, 2), (3, 5), (1,6))
>>> vector_integrate(1, triangle)
sqrt(5) + sqrt(13) + 4

要定义一个实心球体,我们需要使用三个参数(r,theta和phi)。为 ParametricRegion 极限的顺序决定了积分的符号。

>>> solidsphere = ParametricRegion((r*sin(phi)*cos(theta),r*sin(phi)*sin(theta), r*cos(phi)),
...                             (phi, 0, pi), (theta, 0, 2*pi), (r, 0, 3))
>>> vector_integrate(1, solidsphere)
36*pi

物体质量的计算#

考虑具有顶点(0,0),(0,5),(5,0)和密度的三角形薄板 \(\rho(x, y) = xy\:kg/m^2\) . 求总质量。

>>> triangle = ParametricRegion((x, y), (x, 0, 5), (y, 0, 5 - x))
>>> vector_integrate(C.x*C.y, triangle)
625/24

求一个圆柱体的密度,它的半径是a轴的中心 \(\rho = x^2 + y^2\:kg/m^2\) .

>>> a, h = symbols('a h', positive=True)
>>> cylinder = ParametricRegion((r*cos(theta), r*sin(theta), z),
...                     (theta, 0, 2*pi), (z, 0, h), (r, 0, a))
>>> vector_integrate(C.x**2 + C.y**2, cylinder)
pi*a**4*h/2

通量计算#

1考虑一个有恒定向量场的空间区域 \(E(x, y, z) = a\mathbf{{\hat{{k}}}}\) . 半径r的半球位于x-y平面上。磁场通过球体的通量是多少?

>>> semisphere = ParametricRegion((r*sin(phi)*cos(theta), r*sin(phi)*sin(theta), r*cos(phi)),\
...                             (phi, 0, pi/2), (theta, 0, 2*pi))
>>> flux = vector_integrate(a*C.k, semisphere)
>>> flux
pi*a*r**2

2考虑一个有向量场的空间区域 \(E(x, y, z) = x^2 \mathbf{{\hat{{k}}}}\) 在x-y平面上,还有一个场 \(E(x, y, z) = y^2 \mathbf{{\hat{{k}}}}\) 在x-y平面以下。这个向量场通过一个边长为L,中心在原点的立方体的通量是多少?”

磁场与z轴平行,因此只有盒子的顶面和底面有助于通量。

>>> L = symbols('L', positive=True)
>>> top_face = ParametricRegion((x, y, L/2), (x, -L/2, L/2), (y, -L/2, L/2))
>>> bottom_face = ParametricRegion((x, y, -L/2), (x, -L/2, L/2), (y, -L/2, L/2))
>>> flux = vector_integrate(C.x**2*C.k, top_face) + vector_integrate(C.y**2*C.k, bottom_face)
>>> flux
L**4/6

斯托克定理的验证#

看到了吗https://en.wikipedia.org/wiki/Stokes%27_定理

例1
>>> from sympy.vector import curl
>>> curve = ParametricRegion((cos(theta), sin(theta)), (theta, 0, pi/2))
>>> surface = ParametricRegion((r*cos(theta), r*sin(theta)), (r, 0, 1), (theta, 0, pi/2))
>>> F = C.y*C.i + C.z*C.k + C.x*C.k
>>>
>>> vector_integrate(F, curve)
-pi/4
>>> vector_integrate(curl(F), surface)
-pi/4
例2
>>> circle = ParametricRegion((cos(theta), sin(theta), 1), (theta, 0, 2*pi))
>>> cone = ParametricRegion((r*cos(theta), r*sin(theta), r), (r, 0, 1), (theta, 0, 2*pi))
>>> cone = ParametricRegion((r*cos(theta), r*sin(theta), r), (r, 0, 1), (theta, 0, 2*pi))
>>> f = (-C.y**3/3 + sin(C.x))*C.i + (C.x**3/3 + cos(C.y))*C.j + C.x*C.y*C.z*C.k
>>> vector_integrate(f,  circle)
pi/2
>>> vector_integrate(curl(f),  cone)
pi/2

验证散度定理#

看到了吗https://en.wikipedia.org/wiki/difference_定理

例1
>>> from sympy.vector import divergence
>>> sphere = ParametricRegion((4*sin(phi)*cos(theta),4*sin(phi)*sin(theta), 4*cos(phi)),
...                         (phi, 0, pi), (theta, 0, 2*pi))
>>> solidsphere = ParametricRegion((r*sin(phi)*cos(theta),r*sin(phi)*sin(theta), r*cos(phi)),
...     (r, 0, 4),(phi, 0, pi), (theta, 0, 2*pi))
>>> field = C.x**3*C.i + C.y**3*C.j + C.z**3*C.k
>>> vector_integrate(field, sphere)
12288*pi/5
>>> vector_integrate(divergence(field), solidsphere)
12288*pi/5
例2
>>> cube = ParametricRegion((x, y, z), (x, 0, 1), (y, 0, 1), (z, 0, 1))
>>> field = 2*C.x*C.y*C.i + 3*C.x*C.y*C.j + C.z*exp(C.x + C.y)*C.k
>>> vector_integrate(divergence(field), cube)
-E + 7/2 + E*(-1 + E)