含有一个参数的无穷级数
我怎么说服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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。