我正在使用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潜力。
现在,当我使用:
来区分这个与xsm.simplify(U.diff(x))
正如您所看到的,在答案中明确表达了例如D
:D0 + e*D0*sin(k*phi)
。而且,我犯了罪(atan2(x,y)而不是罪(phi),所有我定义的表达都会发生同样的事情。
结果是否有办法自动显示我的定义而不是长版本,而无需为每个用户定义的变量使用subs
方法?
E.g。而不是D0 + e*D0*sin(k*phi)
Sympy自动使用符号D
?
答案 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值得一读。