sympy.vector 中的基本功能 (文档字符串)

sympy.vector.matrix_to_vector(matrix, system)[源代码][源代码]

将矩阵形式的向量转换为 Vector 实例。

假设矩阵的元素表示向量在’系统’基向量上的分量的度量数。

参数:
矩阵SymPy 矩阵,维度:(3, 1)

要转换为向量的矩阵

系统CoordSys3D

向量将要定义的坐标系

示例

>>> from sympy import ImmutableMatrix as Matrix
>>> m = Matrix([1, 2, 3])
>>> from sympy.vector import CoordSys3D, matrix_to_vector
>>> C = CoordSys3D('C')
>>> v = matrix_to_vector(m, C)
>>> v
C.i + 2*C.j + 3*C.k
>>> v.to_matrix(C) == m
True
sympy.vector.express(
expr,
system,
system2=None,
variables=False,
)[源代码][源代码]

用于’express’功能的全局函数。

在给定的坐标系中重新表达向量、并矢或标量(可符号化的)。

如果 ‘variables’ 为 True,那么向量/标量场或并矢场中存在的其他坐标系的坐标变量(基标量)也将根据给定系统的基标量进行替换。

参数:
表达式向量/并矢/标量(可sympy化)

在 CoordSys3D ‘system’ 中重新表达的表达式

系统: CoordSys3D

表达式所使用的坐标系

system2: CoordSys3D

重新表达所需的另一个坐标系(仅适用于二元表达式)

变量布尔

指定是否在表达式中替换存在的坐标变量,以参数系统的坐标变量表示。

示例

>>> from sympy.vector import CoordSys3D
>>> from sympy import Symbol, cos, sin
>>> N = CoordSys3D('N')
>>> q = Symbol('q')
>>> B = N.orient_new_axis('B', q, N.k)
>>> from sympy.vector import express
>>> express(B.i, N)
(cos(q))*N.i + (sin(q))*N.j
>>> express(N.x, B, variables=True)
B.x*cos(q) - B.y*sin(q)
>>> d = N.i.outer(N.i)
>>> express(d, B, N) == (cos(q))*(B.i|N.i) + (-sin(q))*(B.j|N.i)
True
sympy.vector.curl(vect, doit=True)[源代码][源代码]

返回相对于给定坐标系的基标量计算的向量场的旋度。

参数:
矢量向量

向量操作数

执行布尔

如果为 True,则在每个组件上调用 .doit() 后返回结果。否则,返回的表达式包含 Derivative 实例。

示例

>>> from sympy.vector import CoordSys3D, curl
>>> R = CoordSys3D('R')
>>> v1 = R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k
>>> curl(v1)
0
>>> v2 = R.x*R.y*R.z*R.i
>>> curl(v2)
R.x*R.y*R.j + (-R.x*R.z)*R.k
sympy.vector.divergence(vect, doit=True)[源代码][源代码]

返回一个矢量场相对于给定坐标系基标量的散度。

参数:
向量向量

向量操作数

执行布尔

如果为 True,则在每个组件上调用 .doit() 后返回结果。否则,返回的表达式包含 Derivative 实例。

示例

>>> from sympy.vector import CoordSys3D, divergence
>>> R = CoordSys3D('R')
>>> v1 = R.x*R.y*R.z * (R.i+R.j+R.k)
>>> divergence(v1)
R.x*R.y + R.x*R.z + R.y*R.z
>>> v2 = 2*R.y*R.z*R.j
>>> divergence(v2)
2*R.z
sympy.vector.gradient(scalar_field, doit=True)[源代码][源代码]

返回相对于给定坐标系的基标量计算的标量场的向量梯度。

参数:
标量场SymPy 表达式

要计算梯度的标量场

执行布尔

如果为 True,则在每个组件上调用 .doit() 后返回结果。否则,返回的表达式包含 Derivative 实例。

示例

>>> from sympy.vector import CoordSys3D, gradient
>>> R = CoordSys3D('R')
>>> s1 = R.x*R.y*R.z
>>> gradient(s1)
R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k
>>> s2 = 5*R.x**2*R.z
>>> gradient(s2)
10*R.x*R.z*R.i + 5*R.x**2*R.k
sympy.vector.is_conservative(field)[源代码][源代码]

检查一个字段是否保守。

参数:
字段向量

检查保守属性的字段

示例

>>> from sympy.vector import CoordSys3D
>>> from sympy.vector import is_conservative
>>> R = CoordSys3D('R')
>>> is_conservative(R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k)
True
>>> is_conservative(R.z*R.j)
False
sympy.vector.is_solenoidal(field)[源代码][源代码]

检查一个场是否是无散的。

参数:
字段向量

检查无散度性质的字段

示例

>>> from sympy.vector import CoordSys3D
>>> from sympy.vector import is_solenoidal
>>> R = CoordSys3D('R')
>>> is_solenoidal(R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k)
True
>>> is_solenoidal(R.y * R.j)
False
sympy.vector.scalar_potential(field, coord_sys)[源代码][源代码]

返回给定坐标系中场的标量势函数(不包括附加的积分常数)。

参数:
字段向量

要计算其标量势函数的向量场

坐标系CoordSys3D

进行计算的坐标系

示例

>>> from sympy.vector import CoordSys3D
>>> from sympy.vector import scalar_potential, gradient
>>> R = CoordSys3D('R')
>>> scalar_potential(R.k, R) == R.z
True
>>> scalar_field = 2*R.x**2*R.y*R.z
>>> grad_field = gradient(scalar_field)
>>> scalar_potential(grad_field, R)
2*R.x**2*R.y*R.z
sympy.vector.scalar_potential_difference(
field,
coord_sys,
point1,
point2,
)[源代码][源代码]

返回在特定坐标系中,两个点之间相对于给定场的标量电势差。

如果提供了一个标量场,则考虑其在两点处的值。如果提供了一个保守向量场,则使用其标量势函数在两点处的值。

返回(点2的电势)-(点1的电势)

这两个点的位置向量是相对于所提供的坐标系的原点计算的。

参数:
字段向量/表达式

要计算的字段

坐标系CoordSys3D

进行计算的坐标系

点1

在给定坐标系中的初始点

位置2

给定坐标系中的第二个点

示例

>>> from sympy.vector import CoordSys3D
>>> from sympy.vector import scalar_potential_difference
>>> R = CoordSys3D('R')
>>> P = R.origin.locate_new('P', R.x*R.i + R.y*R.j + R.z*R.k)
>>> vectfield = 4*R.x*R.y*R.i + 2*R.x**2*R.j
>>> scalar_potential_difference(vectfield, R, R.origin, P)
2*R.x**2*R.y
>>> Q = R.origin.locate_new('O', 3*R.i + R.j + 2*R.k)
>>> scalar_potential_difference(vectfield, R, P, Q)
-2*R.x**2*R.y + 18
sympy.vector.integrals.vector_integrate(field, *region)[源代码][源代码]

计算向量/标量场在一个区域或一组参数上的积分。

示例

>>> from sympy.vector import CoordSys3D, ParametricRegion, vector_integrate
>>> from sympy.abc import x, y, t
>>> C = CoordSys3D('C')
>>> region = ParametricRegion((t, t**2), (t, 1, 5))
>>> vector_integrate(C.x*C.i, region)
12

几何模块中某些对象的积分也可以计算。

>>> from sympy.geometry import Point, Circle, Triangle
>>> c = Circle(Point(0, 2), 5)
>>> vector_integrate(C.x**2 + C.y**2, c)
290*pi
>>> triangle = Triangle(Point(-2, 3), Point(2, 3), Point(0, 5))
>>> vector_integrate(3*C.x**2*C.y*C.i + C.j, triangle)
-8

一些简单的隐式区域的积分可以计算。但在大多数情况下,计算它们需要太长时间。这是由于参数表示的表达式变得很大。

>>> from sympy.vector import ImplicitRegion
>>> c2 = ImplicitRegion((x, y), (x - 2)**2 + (y - 1)**2 - 9)
>>> vector_integrate(1, c2)
6*pi

关于基标量的场积分:

>>> vector_integrate(12*C.y**3, (C.y, 1, 3))
240
>>> vector_integrate(C.x**2*C.z, C.x)
C.x**3*C.z/3
>>> vector_integrate(C.x*C.i - C.y*C.k, C.x)
(Integral(C.x, C.x))*C.i + (Integral(-C.y, C.x))*C.k
>>> _.doit()
C.x**2/2*C.i + (-C.x*C.y)*C.k