python - Sympy 导数中的精确用户定义表达式

标签 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”代表二维势。

现在,当我使用以下方法区分它与 x 时:

sm.simplify(U.diff(x))

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

如您所见,答案中明确包含了完整的表达式,例如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关于这一点值得一读。

关于python - Sympy 导数中的精确用户定义表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36711687/

相关文章:

javascript - 函数在函数表达式中不可见,如何解决?

c# - 在 C# 中替换正则表达式字符串

python - 如何判断 Sympy 变量是否为复数?

python - 参数比例及数学表达式

python - 如何链接一个mysql记录和一个MongoDB文档?

python - 使用grpc和cloud-datastore时如何修复App Engine Flex中的AttributeError?

c# - 替换表达式树中的参数值

python - 使用 sympy 对具有符号输出的函数求和

在 docker 上运行时 Python flask reloader "Errno 2 No such file or directory"错误

python - 如何从Python中的特定路径调用文件的基本名称?