一般用法示例#

本节详细介绍了使用 sympy.vector 包裹。

四边形问题#

问题#

OABC是三维空间中的任意四边形。P是OA的中点,Q是AB的中点,R是BC的中点,S是OC的中点。证明PQ与SR平行

解决方案#

此问题的解决方案演示了 Point ,以及基本操作 Vector .

定义坐标系

>>> from sympy.vector import CoordSys3D
>>> Sys = CoordSys3D('Sys')

将O点定义为系统原点。我们可以做到这一点而不失概括性

>>> O = Sys.origin

相对于O定义点A

>>> from sympy import symbols
>>> a1, a2, a3 = symbols('a1 a2 a3')
>>> A = O.locate_new('A', a1*Sys.i + a2*Sys.j + a3*Sys.k)

类似地定义B点和C点

>>> b1, b2, b3 = symbols('b1 b2 b3')
>>> B = O.locate_new('B', b1*Sys.i + b2*Sys.j + b3*Sys.k)
>>> c1, c2, c3 = symbols('c1 c2 c3')
>>> C = O.locate_new('C', c1*Sys.i + c2*Sys.j + c3*Sys.k)

P是OA的中点。让我们根据O来定位它(您也可以根据A来定义它)。

>>> P = O.locate_new('P', A.position_wrt(O) + (O.position_wrt(A) / 2))

同样地,问题定义如下。

>>> Q = A.locate_new('Q', B.position_wrt(A) / 2)
>>> R = B.locate_new('R', C.position_wrt(B) / 2)
>>> S = O.locate_new('R', C.position_wrt(O) / 2)

现在计算PQ和SR指定方向上的向量。

>>> PQ = Q.position_wrt(P)
>>> SR = R.position_wrt(S)

计算叉积

>>> PQ.cross(SR)
0

因此证明向量124sr是两个平行向量。

Del运算符的第三乘积规则#

#

问题#

证明第三条规则- \(\nabla \cdot (f \vec v) = f (\nabla \cdot \vec v) + \vec v \cdot (\nabla f)\)

解决方案#

从坐标系开始

>>> from sympy.vector import CoordSys3D, Del
>>> delop = Del()
>>> C = CoordSys3D('C')

标量场 \(f\) 以及向量场的测度数 \(\vec v\) 是坐标系中所有坐标变量的函数。因此,用这种方式定义SymPy函数。

>>> from sympy import symbols, Function
>>> v1, v2, v3, f = symbols('v1 v2 v3 f', cls=Function)

v1v2v3\(X\)\(Y\)\(Z\) 向量场的分量。

将向量场定义为 vfield 标量场是 sfield .

>>> vfield = v1(C.x, C.y, C.z)*C.i + v2(C.x, C.y, C.z)*C.j + v3(C.x, C.y, C.z)*C.k
>>> ffield = f(C.x, C.y, C.z)

使用以下公式构造方程的LHS表达式 Del() .

>>> lhs = (delop.dot(ffield * vfield)).doit()

同样,将定义RHS。

>>> rhs = ((vfield.dot(delop(ffield))) + (ffield * (delop.dot(vfield)))).doit()

现在,为了证明乘积规则,我们只需要将lhs和rhs的扩展和简化版本等同起来,这样SymPy表达式就匹配了。

>>> lhs.expand().simplify() == rhs.expand().doit().simplify()
True

因此,上面提到的第三个乘积规则的一般形式可以用 sympy.vector .