Python 正态分布函数期望值的计算
我想计算正态分布中某些函数的期望值 例如:Python 正态分布函数期望值的计算,python,scipy,statistics,numerical-methods,numerical-integration,Python,Scipy,Statistics,Numerical Methods,Numerical Integration,我想计算正态分布中某些函数的期望值 例如: mu=100 k=100 西格玛=10 val,err=quad(lambda x:norm.pdf((x-mu)/sigma)*x如果x>k否则为0,-math.inf,math.inf) 打印(val) 这打印出4.878683842492743e-288,这显然不是正确答案 我认为这是因为SciPy无法对高斯函数进行积分。我怎样才能解决这个问题?理想情况下,我想要一种方法,它允许人们在高斯分布上集成各种各样的函数,并且不特定于我所给出的例子 谢
mu=100
k=100
西格玛=10
val,err=quad(lambda x:norm.pdf((x-mu)/sigma)*x如果x>k否则为0,-math.inf,math.inf)
打印(val)
这打印出4.878683842492743e-288,这显然不是正确答案
我认为这是因为SciPy无法对高斯函数进行积分。我怎样才能解决这个问题?理想情况下,我想要一种方法,它允许人们在高斯分布上集成各种各样的函数,并且不特定于我所给出的例子
谢谢 我认为这是正交的一个问题(有时它并不真正适应),并且不喜欢if语句 所以我建议这样(从k积分到无穷大): 请注意,正如Jimmy所暗示的,高斯函数的正确形式需要1/sigma 另一种做积分的方法是强迫quad在某些点上小心。我最喜欢的方式是做一些像
import numpy as np
from scipy.integrate import quad
#this is the Gaussian. Note that *0.5*(np.sign(x-k)+1) is 0 for x<k and 1 otherwise.
def f(x):
return 1/(np.sqrt(2*np.pi)*sigma)*np.exp(- 0.5*( (x-mu)/sigma )**2 ) *x*0.5*(np.sign(x-k)+1)
#use this to integrate from in (-1,1)
def G(u):
x=u/(1-u**2)
return f(x)*(1+u**2)/(1-u**2)**2
quad(G,-1,1,points=np.linspace(-0.999,0.999,25))
将numpy导入为np
从scipy.integrate导入四元组
#这是高斯分布。请注意,*0.5*(np.符号(x-k)+1)是0表示XY,您在这里积分的是N(0,1)密度,所以范围不应该是从0到+inf而不是从k到+inf?建议您仔细检查这里的文档
import numpy as np
from scipy.integrate import quad
#this is the Gaussian. Note that *0.5*(np.sign(x-k)+1) is 0 for x<k and 1 otherwise.
def f(x):
return 1/(np.sqrt(2*np.pi)*sigma)*np.exp(- 0.5*( (x-mu)/sigma )**2 ) *x*0.5*(np.sign(x-k)+1)
#use this to integrate from in (-1,1)
def G(u):
x=u/(1-u**2)
return f(x)*(1+u**2)/(1-u**2)**2
quad(G,-1,1,points=np.linspace(-0.999,0.999,25))