numpyで使用される数値が非常に少ないため、いくつかの問題があります。関数にfloatを合計すると、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()
ご覧のとおり、非常に低い合計値はゼロの周りに散在しているか、正確にゼロですが、乗算された値は問題ありません...
誰か助けて/説明してもらえますか?どうもありがとう!