Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正态分布函数期望值的计算_Python_Scipy_Statistics_Numerical Methods_Numerical Integration - Fatal编程技术网

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))