【问题标题】:Exact user defined expressions in Sympy derivativesSympy 衍生品中精确的用户定义表达式
【发布时间】:2016-04-19 07:41:01
【问题描述】:

我正在使用 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”代表二维电位。

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

sm.simplify(U.diff(x))

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

如您所见,在答案中有明确的完整表达式,例如DD0 + e*D0*sin(k*phi)。此外,我得到的是 sin(atan2(x,y) 而不是 sin(phi),并且我定义的所有表达式都会发生同样的情况。

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

例如而不是D0 + e*D0*sin(k*phi) Sympy 自动使用符号D?

【问题讨论】:

    标签: python expression sympy user-defined


    【解决方案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 值得一读。

    【讨论】:

    • 感谢您的回答,但这对我没有帮助。正如我在我的问题中所说,我正在(正在)寻找一种方法来做到这一点,而不必对每个变量使用 subs 方法。此外,我仍然需要 'python 变量' phi 来实际写入电位,否则它会变得复杂。因此,如果我要按照您的回答,我将不得不在现有代码中添加 6 个以上的命令来重新定义引用并进行替换。在我开始使用 sympy 之前,我也读过“这个”,作为我学习的一部分。它没有提供任何关于我想要做什么的信息。
    • 我想做的是让预定义的表达式自动包含在 sympy 计算的结果中,而不需要subs。我使用了许多不同的潜力。
    • @GeorgeDatseris SymPy 要求您明确说明何时要在计算中用表达式替换符号。我建议为您的计算建立一个(symbol, expr) 对列表,并使用subs 在您希望替换它们的计算中的任何点将它们替换为完整表达式。如果您将替换列表传递给subs,则可以使用单个 subs 调用来完成整个操作。
    • 好的,谢谢。这似乎是最有效的方法。据我所知,没有任何选项不包括额外使用潜艇。所以谢谢你的回答。
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多