含有一个参数的无穷级数

编程语言 2026-07-10

我怎么说服SymPy对一个收敛的无穷和进行求值,而我知道SymPy应该能够做到?例如,下面的代码只是返回未求值的无穷和:

a = Symbol('a',real=True)
Sum(1/(n**2+a**2),(n,1,oo)).doit()

不过,我可以通过把参数a 替换成一个内部常量来欺骗SymPy,例如:

Sum(1/(n**2+exp(1)**2),(n,1,oo)).doit()

由于期望的结果中不包含exp(1),我可以把exp(1) 当作一个参数来对待。我可以用exp(2)、exp(3) 等来检查SymPy给出的结果,而不是exp(1)。但这种做法看起来很荒谬。我感觉我遗漏了什么!

解决方案

请从以下代码开始(摘自 在SymPy中将变量定义为常量

class SymbolTrick(NumberSymbol):
    def _new_(self, name): 
        obj = NumberSymbol._new_(self)
        obj._name = name  
        return obj  

    _as_mpf_val = pi._as_mpf_val
    approximation_interval = pi.approximation_interval  
    __str__ = lambda self: str(self._name)

然后,而不是以下内容,

a = Symbol('a')  
Sum(1/(n**2 + a**2),(n,1,oo)).doit()

请改为使用

a = Symbol('a') 
aa = SymbolTrick('aa')  
(Sum(1/(n**2 + aa**2),(n,1,oo)).doit()).subs(aa,a)

我必须替换这部分中的实例,因为它们显示得不正确,呈现为 SymbolTrick() 而不是 aa 或类似形式。然而,SymPy在内部确实能够区分它们,因为你可以对包含不止一个参数的和使用同样的方法。可能有一个很好的办法来修复这个显示问题,但我对SymPy的类结构了解不够,无法弄清楚具体怎么实现。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章