处理具有大的正数和负数的操作

时间:2015-10-20 00:02:12

标签: python numpy floating-point

我有以下功能:

import scipy.misc
import scipy.special

def wave_func(x, n): 
  pre = 1. / ((2**n * scipy.misc.factorial(n) * numpy.sqrt(numpy.pi))**.5)
  return pre * numpy.exp(-x**2 / 2.) * scipy.special.eval_hermite(n, x)

此功能收敛。我想对{n, 0, 500}的这个函数进行求和。我希望n的最大值甚至可以大于500,即15000

虽然函数收敛,但pre变得非常小,scipy.special.eval_hermite(n, x)对于大n变得非常大。 Python似乎无法处理这些值。非常小的值将返回0.0,而较大的值将返回为inf。将这些单独的结果相乘将返回0

Mathematica等程序可以输出结果。这是如何运作的?它们不受float64的限制吗?

是否有人有解决方案或解决方法,以便我能够评估我的大n函数?

1 个答案:

答案 0 :(得分:1)

Mathematica和类似的程序对所涉及的数字的大小敏感。他们重新排列因子以保持准确性:从e ^( - x ^ 2/2)/ pi ^ 0.25开始,然后循环i = 1到n ...乘以i,除以x(或兼容的任何东西)在hermite函数中循环),...

他们努力使值的大小合理地接近1.0,这有助于保持准确性。他们会从小端收集汇总。他们......嗯,有几个基本的数值分析技巧。

那是否足够详细?