Python计算高斯函数时溢出

Python overflow when calculating Gaussian function

我正在尝试使用以下定义计算高斯函数的值

from math import e

def function(x):
    return 100 / (e**((x-2000)**2))**1/16

但是我得到了 20000、30000、1000000 等值的溢出。 你知道解决方法吗 谢谢!

  1. 使用math.exp:

    100 / math.exp((x-2000)**2))**1/16
    

    这比 e**.

  2. 性能更高,数值更准确
  3. 请注意,...**1/16 可能无法满足您的要求。 **/higher operator precedence,所以上面等价于(...**1)/16。将分数括在括号中:

    100 / math.exp((x-2000)**2)**(1/16.0)
    

    以浮点格式 (16.0) 写入 16 以防止整数除法。

  4. 使用指数规则合并 1/16:

    100 / math.exp((x-2000)**2/16.0)
    

    这减少了大参数,有助于提高精度。

  5. 翻转参数的符号并将除法更改为乘法:

    100 * math.exp(-(x-2000)**2/16.0)
    

    这在极端情况下会下溢而不是上溢。在这种情况下,下溢表现得更好——你只会得到零而不是 OverflowError.

我的建议是通过取对数来修改公式(即将公式与项的乘积转换为每项的对数之和),然后取结果的指数。