我试图计算任意点伽玛的高斯积分,如下所示:
import numpy as np
from scipy.stats import norm
def func(mu, sigma, gamma):
x = np.linspace(mu-4*sigma, mu + 4*sigma, 100)
y = norm.pdf(x, mu, sigma)
area = y[x>=gamma].sum()
print(f"Area is ~ {area:.3f}")
plt.plot(x,y, label=f'μ0 = {mu}, σ={sigma}')
plt.fill_between(x[x>gamma],y[x>gamma], alpha=.5, label=f'area={area:.3f}')
plt.title("Example")
plt.legend(loc='best')
plt.show()
# Execute the function
func(0,10,-20)产出为:面积~ 1.211

蓝色区域是集成的,但是它添加了多个(远不止一个),即使它不是完整的功能。
我找到了this相关的,但没有帮助。
为什么加起来不止一个?
发布于 2018-10-09 04:32:58
正如Weckesser所说,问题在于我没有考虑dx项(中间值的基本大小)。
幸运的是,这是很容易解决的,所以为了完整,在这里.
import numpy as np
from scipy.stats import norm
def func(mu, sigma, gamma):
# Notice the retstep=True param, it will return the dx needed
x, dx = np.linspace(mu-4*sigma, mu + 4*sigma, 100, retstep=True)
y = norm.pdf(x, mu, sigma)
# multiply all with dx
area = y[x>=gamma].sum() * dx
print(f"Area is ~ {area:.3f}")
plt.plot(x,y, label=f'μ0 = {mu}, σ={sigma}')
plt.fill_between(x[x>gamma],y[x>gamma], alpha=.5, label=f'area={area:.3f}')
plt.title("Example")
plt.legend(loc='best')
plt.show()
func(0,10,-20)现在输出有意义了,它是Area is ~ 0.978
图像是

“非常感谢”沃伦·韦克塞!
https://stackoverflow.com/questions/52713261
复制相似问题