如何在python中数值执行无穷和

2024-03-29 07:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

为了我的数学编程,我正从Maple迁移到python。作为这项工作的一部分,我试图找出什么是正确的工具来进行无穷和的数值计算。

我想用数值计算例如:

sum(exp(-x^2), x = -infinity..infinity)

在枫树,这就是

evalf(sum(exp(-x^2), x = -infinity..infinity));

                             1.772637205

你能在python中做一些类似的事情吗,也许可以使用科学的python生态系统(scipy、numpy、sympy等)?


Tags: 工具numpy编程数学科学scipy事情数值
3条回答

我以前用过mpmath的^{}来做这个,结果很好:

>>> 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')

我希望您可以通过求和您要求和的表达式的值足够大的范围(即大于某些预先指定的eps)来完成一些求和。但我不知道怎样才能更普遍地解决这个问题。

只要有可能,你当然应该使用封闭式表格。例如,当|x|<1时,1+x+x^2+x^3+...(直到无穷大)和为1/(1-x)

如果条件降得快到零

def infinisum(f):
    n, res = 0, f(0)
    while True:
        term = sum( f(k) for k in range(2**n,2**(n+1)) )
        if (res+term)-res == 0:
             break;
        n,res = n+1, res+term
    return res

那么你的特别系列是

2*infinisum(lambda x: exp(-x**2)) - 1

分三步给出1.772637204826652, 或者一般来说,忘记了这个函数是对称的

f = lambda x:exp(-x**2)
infinisum(f)+infinisum(lambda x : f(-1-x))

相关问题 更多 >