Sympy衍生物中精确的用户定义表达式

时间:2016-04-19 07:41:01

标签: python expression sympy user-defined

我正在使用Sympy来计算复杂潜力的导数。 我已将x,y,D0,e,C,k,d,b定义为Sympy符号。 然后我继续做以下定义:

import sympy as sm
x, y, D0, e, C, k, d, b = sm.symbols("x, y, D0, e, C, k, d, b")
phi = sm.atan2(y,x)
D = D0 + e*D0*sm.sin(k*phi)
rho = sm.sqrt(x**2 + y**2)

U = (2**b)/((2*D-d)**b)*(D - rho)**b

符号" U"代表2D潜力。

现在,当我使用:

来区分这个与x
sm.simplify(U.diff(x))

我得到一个非常长的答案: extremely long naswer

正如您所看到的,在答案中明确表达了例如DD0 + e*D0*sin(k*phi)。而且,我犯了罪(atan2(x,y)而不是罪(phi),所有我定义的表达都会发生同样的事情。

结果是否有办法自动显示我的定义而不是长版本,而无需为每个用户定义的变量使用subs方法?

E.g。而不是D0 + e*D0*sin(k*phi) Sympy自动使用符号D

1 个答案:

答案 0 :(得分:1)

当您编写phi = sm.atan2(y,x)时,会将Python变量分配给atan2(y, x)的结果。如果您希望phi成为符号,则必须以这种方式定义

phi = symbols('phi')

然后将phi替换为atan2(y, x)

U.subs(phi, atan2(y, x))

This值得一读。