我的数学编程正在从 Maple 转移到 python。作为其中的一部分,我试图找出以数字方式执行无限求和的正确工具。
我想以数值方式计算,例如:
sum(exp(-x^2), x = -infinity..infinity)
在 Maple 中,这只是
evalf(sum(exp(-x^2), x = -infinity..infinity));
Run Code Online (Sandbox Code Playgroud)1.772637205
你能在 python 中做类似的事情,也许使用科学的 python 生态系统(scipy、numpy、sympy 等)?
我过去曾为此使用过 mpmath nsum,效果很好:
>>> from mpmath import nsum, exp, inf
>>> nsum(lambda x: exp(-x**2), [-inf, inf])
mpf('1.7726372048266521')
Run Code Online (Sandbox Code Playgroud)
这与
>>> from mpmath import quad
>>> quad(lambda x: exp(-x**2), [-inf, inf])
mpf('1.7724538509055161')
Run Code Online (Sandbox Code Playgroud)
我们可以得到更高的精度,并将其与解析值进行比较:
>>> import mpmath
>>> mpmath.mp.dps = 50
>>> nsum(lambda x: exp(-x**2), [-inf, inf])
mpf('1.7726372048266521530312505511578584813433860453722459')
>>> mpmath.jtheta(3, 0, 1/exp(1))
mpf('1.7726372048266521530312505511578584813433860453722465')
Run Code Online (Sandbox Code Playgroud)