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