一般用法示例#
本节详细介绍了使用 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运算符的第三乘积规则#
见#
[WikiDel]
问题#
证明第三条规则- \(\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)
v1
, v2
和 v3
是 \(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
.