由于 numpy 使用的数字非常低,我遇到了一些问题。我花了几个星期才将我在数值积分方面经常遇到的问题追溯到一个事实,即当我在函数中添加浮点数时,float64 精度会丢失。使用乘积而不是总和执行数学上相同的计算会得到正确的值。
这是一个代码示例和结果图:
from matplotlib.pyplot import *
from numpy import vectorize, arange
import math
def func_product(x):
return math.exp(-x)/(1+math.exp(x))
def func_sum(x):
return math.exp(-x)-1/(1+math.exp(x))
#mathematically, both functions are the same
vecfunc_sum = vectorize(func_sum)
vecfunc_product = vectorize(func_product)
x = arange(0.,300.,1.)
y_sum = vecfunc_sum(x)
y_product = vecfunc_product(x)
plot(x,y_sum, 'k.-', label='sum')
plot(x,y_product,'r--',label='product')
yscale('symlog', linthreshy=1E-256)
legend(loc='lower right')
show()
如您所见,非常低的总和值分散在零附近或恰好为零,而相乘的值很好......
请,有人可以帮助/解释吗?非常感谢!