Sympy 导数中精确的用户定义表达式
Exact user defined expressions in Sympy derivatives
我正在使用 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"代表二维势
现在,当我使用以下方法区分它与 x 时:
sm.simplify(U.diff(x))
我得到了一个非常长的答案:
如您所见,在答案中有明确的完整表达式,例如D
: D0 + e*D0*sin(k*phi)
。此外,我得到的不是 sin(phi),而是 sin(atan2(x,y),我定义的所有表达式都会发生同样的情况。
有没有办法让结果自动显示我的定义而不是长版本,而无需为每个用户定义的变量使用 subs
方法?
例如而不是 D0 + e*D0*sin(k*phi)
Sympy 自动使用符号 D
?
当您写 phi = sm.atan2(y,x)
时,这会将 Python 变量分配给 atan2(y, x)
的结果。如果你想让phi
成为一个符号,你必须这样定义它
phi = symbols('phi')
然后将 phi
替换为 atan2(y, x)
之后。
U.subs(phi, atan2(y, x))
This 值得一读。
我正在使用 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"代表二维势
现在,当我使用以下方法区分它与 x 时:
sm.simplify(U.diff(x))
我得到了一个非常长的答案:
如您所见,在答案中有明确的完整表达式,例如D
: D0 + e*D0*sin(k*phi)
。此外,我得到的不是 sin(phi),而是 sin(atan2(x,y),我定义的所有表达式都会发生同样的情况。
有没有办法让结果自动显示我的定义而不是长版本,而无需为每个用户定义的变量使用 subs
方法?
例如而不是 D0 + e*D0*sin(k*phi)
Sympy 自动使用符号 D
?
当您写 phi = sm.atan2(y,x)
时,这会将 Python 变量分配给 atan2(y, x)
的结果。如果你想让phi
成为一个符号,你必须这样定义它
phi = symbols('phi')
然后将 phi
替换为 atan2(y, x)
之后。
U.subs(phi, atan2(y, x))
This 值得一读。