基本功能同向矢量(文档字符串)#

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

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

假设矩阵的元素表示向量分量沿“系统”的基向量的度量数。

参数:

矩阵 :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)[源代码]#

“快速”功能的全局函数。

重新表示给定坐标系中的矢量、并矢或标量(可同调)。

如果“variables”为真,则向量/标量场或并矢中存在的其他坐标系的坐标变量(基标量)也将替换为给定系统的基标量。

参数:

expr :矢量/并矢/标量(可解释)

要在CoordSys3D“system”中重新表达的表达式

系统:CoordSys3D

表达式的坐标系

系统2: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)[源代码]#

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

参数:

vect :矢量

向量操作数

doit 布尔

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

实例

>>> 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)[源代码]#

返回给定坐标系的基标量计算的向量场的散度。

参数:

矢量 :矢量

向量操作数

doit 布尔

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

实例

>>> 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)[源代码]#

返回给定坐标系的基标量计算的标量场的矢量梯度。

参数:

scalar_field :SymPy表达式

计算梯度的标量场

doit 布尔

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

实例

>>> 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)[源代码]#

返回给定坐标系中字段的标量势函数(不添加积分常数)。

参数:

领域 :矢量

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

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处的电位)

根据提供的坐标系原点计算两点的位置矢量。

参数:

领域 :矢量/表达式

要计算wrt的字段

coord_sys :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