我希望在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)?
答案 0 :(得分:1)
目前,其他SymPy模块没有使用assumptions module所做的假设,这使得它们没有人们希望的那么有用。
您可以使用.subs
这样伪造它:
y = sp.Sum(x**k, (k,0,oo)).doit().subs(sp.Abs(x) < 1, True)
返回1/(-x + 1)
。
我认为这是目前最好的。因为这只是一个条件的字面替换,而不是逻辑推理,当假设与Piecewise中的条件完全匹配时,它不会起作用:
y = sp.Sum(x**k, (k,0,oo)).doit().subs(sp.Abs(x) < 1/2, True) # alas :(