doit()函数在sympy中继续进行,并尽可能地计算表达式。例如:
from sympy import *
u = IndexedBase('u')
i = symbols('i')
test = Sum(u[i],(i,1,3))
test.doit()会回来

另外:
from sympy import *
u,x = symbols('u, x')
test = Derivative(u,x)
test.doit()创建符号微分,然后计算它。在这种情况下,评估结果为零:


但是如果我想要一个Derivative在Sum里面呢?doit()函数走得太远了:
from sympy import *
u = IndexedBase('u')
x = IndexedBase('x')
i = symbols('i')
test = Sum(Derivative(u[i],x[i]),(i,1,3))
test.doit()这将再次回到零。我想扩展求和,但不实际计算导数。这应该会产生如下表达式:

我怎样才能得到这个作为我的输出?是否可以让doit()命令只在外部函数(Sum())上工作,而不是在内部函数(Derivative())上工作?我做错了吗?
发布于 2017-09-03 15:56:18
我找到了一种方法。
仔细检查doit()命令参数后,设置选项deep = False似乎可以防止计算过于深入表达式。此外,一些迹象表明,有可能更彻底地控制这种情况。命令文档显示:
评估默认情况下不求值的对象,如极限、积分、和。所有这类对象都将进行递归评估,除非某些物种通过“提示”被排除在外,或者除非“深层”提示被设置为“False”。
就我而言,我很好奇如何利用这些“提示”。如果有人能对“提示”的工作提供更多的洞察力,那就太好了。谢谢。
https://stackoverflow.com/questions/46024543
复制相似问题