将SymPy中的doit()函数仅应用于表达式的外部

时间:2017-09-03 14:41:03

标签: python sympy

doit()中的sympy函数继续进行,并尽可能地计算表达式。例如:

from sympy import *
u = IndexedBase('u')
i = symbols('i')
test = Sum(u[i],(i,1,3))
test.doit()

将返回

enter image description here

此外:

from sympy import *
u,x = symbols('u, x')
test = Derivative(u,x)
test.doit()

创建符号差异,然后对其进行评估。在这种情况下,评估结果为零:

enter image description here

enter image description here

但如果我想在DerivativeSum怎么办? 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()

这将再次返回零。我想扩大总和,但实际上并没有评估衍生品。这应该导致表达式如下:

enter image description here

如何将此作为输出?是否有doit()命令只能在外部函数(Sum())上工作,而不是内部函数(Derivative())?我做错了吗?

1 个答案:

答案 0 :(得分:2)

我找到了一种方法。

仔细检查doit()命令参数后,设置选项deep = False似乎会阻止评估过深地进入表达式。此外,一些迹象表明可以更彻底地控制这一点。命令文档显示:

  

评估默认情况下未评估的对象,如限制,   积分,总和和产品。所有这类物品都将是   递归评估,除非通过提示排除某些物种。   或者除非“深邃”。提示设置为“错误”

就我而言,我很好奇这些提示是什么?可以利用。如果有人可以提供有关如何提示'提示的更多信息。工作会很棒。感谢。