我正在从Maple转到python进行数学编程。作为其中的一部分,我试图弄清楚正确的工具是用数字来执行无限求和。
我想以数字方式计算,例如:
sum(exp(-x ^ 2),x = -infinity..infinity)
在Maple中,这只是
evalf(sum(exp(-x ^ 2),x = -infinity..infinity));
1.772637205
你可以在python中做类似的事情,也许使用科学的python生态系统(scipy,numpy,sympy等)?
答案 0 :(得分:3)
我过去曾使用mpmath的nsum
并取得了良好的效果:
>>> from mpmath import nsum, exp, inf
>>> nsum(lambda x: exp(-x**2), [-inf, inf])
mpf('1.7726372048266521')
与
略有不同>>> from mpmath import quad
>>> quad(lambda x: exp(-x**2), [-inf, inf])
mpf('1.7724538509055161')
我们可以以更高的精度获得它,并将其与分析值进行比较:
>>> 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')
答案 1 :(得分:1)
对于足够快到零的术语
def infinisum(f):
sum = 0
n=0
while 1==1:
term = f(n)
if (sum+term)-sum == 0:
break;
sum += term
return sum
然后你的特定系列是
2*infinisum(lambda x: exp(-x**2)) - 1
或一般
f = lambda x:exp(-x**2)
infinisum(f)+infinisum(lambda x : f(-1-x))
答案 2 :(得分:0)
我希望你可以通过求和你所求和的表达式的值足够大的范围来总和一些总和(即大于某些预先指定的eps
)。但我不知道如何更普遍地解决这个问题。
当然,您应该使用封闭形式。例如,1+x+x^2+x^3+...
时1/(1-x)
(最多无穷大)总和为|x|<1
。