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

问题描述 投票:1回答:1

我想在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
1个回答
1
投票

目前,其他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 :(
© www.soinside.com 2019 - 2024. All rights reserved.