给定假设下的求和(返回分段函数)

时间:2018-01-05 16:57:36

标签: sympy

我希望在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)?

1 个答案:

答案 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 :(