贬低同情心

2024-04-26 04:33:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我用sympy做向量演算,我想知道是否有一个简单的方法来数值计算向量和并矢表达式。我知道lambdify函数可以这样使用:

from sympy.abc import x,lambdify

expr=x**x+1
lambda_expr=lambdify(x,expr)
print(lambda_expr(5.0))

二进/矢量表达式有类似的功能吗?我尝试了以下代码,但它引发了语法错误:

from sympy.vector import CoordSys3D, Del

C=CoordSys3D('C')
nabla=Del()

#define some test vectorial field
B=C.x*C.y*C.z*(C.i+C.j+C.k)

#compute a field and a dyad
nabla_B=nabla.dot(B).doit()
rot_B=nabla.cross(B).doit()

#try to get lambda expressions...
lambda_nablaB=lambdify((C.x,C.y,C.z),nabla_b
lambda_rotB=lambdify((C.x,C.y,C.z),rot_B)

语法错误:

 lambda C.x,C.y,C.z: (C.x*C.y*C.z*C.i + C.x*C.y*C.z*C.j + C.x*C.y*C.z*C.k)
                ^
    SyntaxError: invalid syntax

我想数值计算一个场/二元并得到一个numpy数组。你知道吗


Tags: lambdafromimportfield表达式向量数值sympy
1条回答
网友
1楼 · 发布于 2024-04-26 04:33:24

这可能不是一个理想的答案,但下面的解决方案似乎是可行的。函数evalsym将sympy向量转换为numpy向量:

C=CoordSys3D('C')

def evalsym(symvec,pos):
    numvec=num.zeros(3)
    numvec[0]=symvec.evalf(subs={C.x:pos[0],C.y:pos[1],C.z:pos[2]}).dot(C.i)
    numvec[1]=symvec.evalf(subs={C.x:pos[0],C.y:pos[1],C.z:pos[2]}).dot(C.i)
    numvec[2]=symvec.evalf(subs={C.x:pos[0],C.y:pos[1],C.z:pos[2]}).dot(C.i)
    return numvec

相关问题 更多 >