使用非统一度量(python/scipy)集成函数
我想在python中集成一个函数,并提供用于采样值的概率密度(度量)。如果不明显,在使用非统一度量(python/scipy)集成函数,python,numpy,scipy,probability,numerical-methods,Python,Numpy,Scipy,Probability,Numerical Methods,我想在python中集成一个函数,并提供用于采样值的概率密度(度量)。如果不明显,在[a,b]中积分f(x)dx会隐式使用[a,b]上的统一概率密度,我想使用我自己的概率密度(例如指数) 我可以自己做,使用np.random.*但是 我错过了scipy.integrate.quad中提供的优化。或者所有这些优化都假设密度是一致的 我需要自己做误差估计,这不是小事。或许是这样?也许错误只是和(f(x))/n的方差 有什么想法吗?正如unutbu所说,如果你有密度函数,你可以使用scipy.in
[a,b]
中积分f(x)dx
会隐式使用[a,b]
上的统一概率密度,我想使用我自己的概率密度(例如指数)
我可以自己做,使用np.random.*
但是
- 我错过了
中提供的优化。或者所有这些优化都假设密度是一致的scipy.integrate.quad
- 我需要自己做误差估计,这不是小事。或许是这样?也许错误只是
和(f(x))/n的方差
有什么想法吗?正如unutbu所说,如果你有密度函数,你可以使用
scipy.integrate.quad
将函数的乘积与pdf进行集成
对于scipy.stats
中提供的发行版,我们也可以使用expect函数
比如说
>>> from scipy import stats
>>> f = lambda x: x**2
>>> stats.norm.expect(f, loc=0, scale=1)
1.0000000000000011
>>> stats.norm.expect(f, loc=0, scale=np.sqrt(2))
1.9999999999999996
scipy.integrate.quad
也有一些预定义的权重函数,尽管它们没有标准化为概率密度函数
近似误差取决于调用
integrate.quad
的设置。为了简洁起见,建议了3种方法来计算概率p(x)下f(x)的期望值:
- 假设p以封闭形式给出,使用
计算scipy.integrate.quad
f(x)p(x)
- 假设p可以从样本N值中取样
,然后通过x=p(N)
评估期望值,通过np.mean(f(x))
np.std(f(x))/np.sqrt(N)
- 假设p在stats.norm
stats.norm中可用,则使用
stats.norm.expect(f)
- 假设我们有分布的
而不是CDF(x)
,计算p(x)
,然后使用H=逆[CDF]
scipy.integrate.quad
[这是因为变量的变化:替换y=CDF(x)并注意到p(x)=CDF'(x)会产生变化dy=p(x)dx,因此int{f(x)p(x)dx}==int{f(x)dy}==int{f(H(y))dy,其中H是CDF的倒数。]可以将
f(x)d(mu code>的积分表示为f(x)g(x)的积分吗dx
对于一些密度函数g
?是的,我可以假设我有g,或者我可以根据g对x进行采样。我知道你的方向:)