我想我对小数字和小数字有问题。在
您能帮我找到解决以下问题的方法:
import numpy as np
def gaussian(xx, mu=0, sigma=1):
return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-(mu-xx)**2/(2*sigma**2))
factors = (1., 0.1, 0.01, 0.001, 0.0001)
for factor in factors:
xx = np.linspace(5000, 5200, 1000)
yy = 1.-(factor*xx*(1.+gaussian(xx, 5100)))
step = xx[1] - xx[0]
print np.sum((1.-yy/(1.-factor*xx))*step)
对于所有不同的factors
,此代码的计算结果应为-1
。
但结果是:
所以问题是,系数越小,我就越麻烦,因为我认为这与Numpy/Python的精度有关。在
哪怕是在小因素的情况下,如何评价方程?在
提前谢谢你的帮助。在
这不是一个裸体问题。你认为结果应该是
-1
的想法是不正确的。在你有效地计算了一个函数};对于这个范围之外的任何东西,高斯函数将使贡献可以忽略不计。所以对于第一近似,我们可以把这个量当作常数。然后我们只剩下这个常数乘以
f(x)
在5100
周围的大区间上的定积分。您正在集成的函数简化为factor * x * gaussian(x) / (1 - factor * x)
。我们可以很容易地给出你所使用的因子的积分值的包络估计值:数量factor * x / (1 - factor * x)
在整个关注范围内变化相当缓慢,大约是5095
到{gaussian(x)
的积分,这将足够接近1
。因此,预期的输出应该在factor * 5100 / (1 - factor * 5100)
区域的某个地方。(尽管当factor
接近1 / 5100
时,这不会很好地工作。)例如,
factor
是0.0001
,factor * 5100 / (1 - factor * 5100)
的值在1.0408163265306123
左右。这已经足够接近你所看到的答案,让人觉得纽比做的事情或多或少是正确的。在相关问题 更多 >
编程相关推荐