最近我和sypy玩了很多次,我想到了计算标量场和向量场的散度和梯度的问题。我现在要做的是解热方程,即
d/dt u(x,t)-a*lap(u(x,t))=0,其中lap(x)=(div(梯度(x))
在标量场上。因为我找不到lap,div和grad物理力学专题,我试着自己去实现from sympy import *
from sympy.physics.mechanics import *
o = ReferenceFrame('o')
x,y,z = symbols('x y z')
class div(Function):
@classmethod
def eval(cls, F):
return F.diff(x, o).dot(o.x)+F.diff(y, o).dot(o.y)+F.diff(z, o).dot(o.z)
class grad(Function):
@classmethod
def eval(cls, F):
return o.x * F.diff(x) + o.y * F.diff(y) + o.z * F.diff(z)
f = x**2 + y**3 + z*0.5
print grad(f)
print type(grad(f))
print div(grad(f))
不幸的是,这给了
^{pr2}$
我知道我可以用galgebra模块做点什么,但首先我想了解一下这里发生了什么。因此,问题是我遗漏了什么?在