gpt4 book ai didi

python - 在 sympy 中调用 doit 方法后,Subs 对象仍然存在

转载 作者:行者123 更新时间:2023-11-28 17:10:13 25 4
gpt4 key购买 nike

我正在尝试使用 sympy 计算一般复合函数导数。在我的具体案例中,脚本如下:

from sympy import *
t=symbols('t')
p=Function('p')
x=Function('x')
v=diff(x(p(t)),t)
a=diff(v,t)

对于变量 a 它产生:

Derivative(p(t), t)**2*Derivative(x(p(t)), p(t), p(t)) + Derivative(p(t), t, t)*Subs(Derivative(x(_xi_1), _xi_1), (_xi_1,), (p(t),))

如果我调用 doit(),答案仍然包含 subs 对象

a.doit() #answer: Derivative(p(t), t)**2*Subs(Derivative(x(_xi_3), _xi_3, _xi_3), (_xi_3,), (p(t),)) + Derivative(x(p(t)), p(t))*Derivative(p(t), t, t)

数学上答案是正确的,但我仍然需要以下格式的输出(没有 Subs 对象):

Derivative(p(t), t)**2*Derivative(x(p(t)), p(t), p(t)) + Derivative(x(p(t)), p(t))*Derivative(p(t), t, t)

有什么方法可以达到预期的效果吗?需要明确的是,与我的原始表达式相比,这个示例非常简单,因此我需要通用的方法来获得所需的输出。

最佳答案

事实上,在这种情况下重复应用 doit() 会导致表达式的两种形式之间的翻转:一半时间第一个加数有 Subs,一半时间是第二个。

但您可以按如下方式处理问题:

for b in a.atoms(Subs):
a = a.xreplace({b: b.doit()})

返回 Derivative(p(t), t)**2*Derivative(x(p(t)), p(t), p(t)) + Derivative(x(p(t) ), p(t))*Derivative(p(t), t, t) 根据需要。

诀窍在于 atoms(Subs) 是表达式中所有 Subs 对象的集合,并且 doit 仅应用于它们,而不应用于 Derivative 对象,它只会把事情搞砸。 (理想情况下,doit 一开始就不会弄乱 Derivative 对象...)

关于python - 在 sympy 中调用 doit 方法后,Subs 对象仍然存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com