1

関数を Python に統合し、値のサンプリングに使用される確率密度 (メジャー) を提供したいと考えています。明らかでない場合は、暗黙的に で積分f(x)dxすると[a,b]、一様確率密度が[a,b]使用されます。独自の確率密度 (たとえば、指数関数) を使用したいと思います。

私は自分でそれを行うことができますnp.random.*が、

  • で利用できる最適化が恋しいですscipy.integrate.quad。それとも、これらすべての最適化は均一な密度を前提としているのでしょうか?
  • 自分でエラーの見積もりを行う必要がありますが、これは簡単なことではありません。それともそうですか?多分エラーはの分散sum(f(x))/nですか?

何か案は?

4

3 に答える 3

0

unutbuが言ったように、密度関数がある場合は、を使用して関数の積をpdfと統合することができますscipy.integrate.quad

で利用可能なディストリビューションについては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

于 2012-09-03T14:10:15.113 に答える
0

別の可能性は、x -> f( H(x)) を統合することです。ここで、H は確率分布の累積分布の逆数です。

[これは変数の変更によるものです: 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 with H with CDF.]

于 2012-09-05T14:27:03.707 に答える
0

簡潔にするために、確率 p(x) の下で f(x) の期待値を計算するための 3 つの方法が提案されました。

  • 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.normstats.norm.expect(f)
  • CDF(x)ではなく分布の があると仮定すると、p(x)計算H=Inverse[CDF]してから、f(H(x))scipy.integrate.quad
于 2012-09-04T17:06:47.187 に答える