我想在SymPy中评估无限几何系列的总和,并想要使用我知道总和必须收敛的事实。 (与此文章类似:How to Sum with conditions on Sympy?)
我的代码:
import sympy as sp
from sympy import oo
from sympy.assumptions import assuming, Q
from sympy.assumptions.assume import global_assumptions
x,k = sp.symbols('x k')
#global_assumptions.add(Q.is_true(sp.Abs(x)<1))
with assuming(Q.is_true(sp.Abs(x)<1)):
y = sp.Sum(x**k,(k,0,oo)).doit()
print y
结果是:
Piecewise((1/(-x + 1), Abs(x) < 1), (Sum(x**k, (k, 0, oo)), True))
所以似乎假设abs(x)<1没有被考虑在内。使用global_assumptions(这里注释掉)并没有给出想要的结果。
具体而言,如何评估总和,使得结果为1 /(1-x)?
目前,其他SymPy模块没有使用assumptions module所做的假设,这使得它们没有人们希望的那么有用。
你可以使用像这样的.subs
来伪造它:
y = sp.Sum(x**k, (k,0,oo)).doit().subs(sp.Abs(x) < 1, True)
返回1/(-x + 1)
。
我认为这是目前最好的。因为这只是对条件而不是逻辑推理的True的字面替换,所以当假设与Piecewise中的条件不完全匹配时,它将不起作用:
y = sp.Sum(x**k, (k,0,oo)).doit().subs(sp.Abs(x) < 1/2, True) # alas :(