6

「象徴的に」解決した問題に対して、少しのシミュレーションを通じて別の解決策を得たいと思います。ここで、Mathematica を使用して直接統合する方法を知りたいと思います。

(0,0 を中心とする) r = 1 の円盤で表されるターゲットを考えてください。ダーツを投げてこのターゲットに命中する確率をシミュレーションしたいと思います。

今、私はそれらを投げる偏りはありません。つまり、平均して中心にヒットします mu = 0 ですが、分散は 1 です。

ダーツがターゲット (または壁 :-) に当たったときの座標を考慮すると、次の分布、2 つのガウスがあります。

XDistribution : 1/Sqrt[2 \[Pi]\[Sigma]^2] E^(-x^2/(2 \[Sigma]^2))

YDistribution : 1/Sqrt[2 \[Pi]\[Sigma]^2] E^(-y^2/(2 \[Sigma]^2))

等分散 =1 で 0 を中心とするこれらの 2 つの分布を使用すると、結合分布は次のような二変量ガウス分布になります。

1/(2 \[Pi]\[Sigma]^2) E^(-((x^2 + y^2)/(2 \[Sigma]^2)))

したがって、ターゲットに命中する確率、または x^2 + y^2 が 1 より劣る確率を知る必要があります。

極座標系での変換後の積分により、最初に解が得られました: .39 . シミュレーションは次を使用して確認しました:

Total@ParallelTable[
   If[
      EuclideanDistance[{
                         RandomVariate[NormalDistribution[0, Sqrt[1]]], 
                         RandomVariate[NormalDistribution[0, Sqrt[1]]]
                        }, {0, 0}] < 1, 1,0], {1000000}]/1000000

Mathematica の統合機能を使用してこの問題を解決するもっと洗練された方法があったと思いますが、エーテル作業をマッピングすることはできませんでした。

4

2 に答える 2

6

これを行うには、実際にはいくつかの方法があります。

最も簡単なのは、次のように使用することNIntegrateです。

JointDistrbution = 1/(2 \[Pi] \[Sigma]^2) E^(-((x^2 + y^2)/(2 \[Sigma]^2)));
NIntegrate[JointDistrbution /. \[Sigma] -> 1, {y, -1, 1}, 
    {x, -Sqrt[1 - y^2], Sqrt[1 - y^2]}] // Timing

Out[1]= {0.009625, 0.393469}

これは経験的に行う別の方法です(上記の例と同様)が、を使用するよりもはるかに遅くなりますNIntegrate

(EuclideanDistance[#, {0, 0}] <= 1 & /@ # // Boole // Total)/
     Length@# &@RandomVariate[NormalDistribution[0, 1], {10^6, 2}] // 
  N // Timing

Out[2]= {5.03216, 0.39281}
于 2011-12-20T03:38:13.897 に答える
4

組み込み関数NProbabilityも高速です。

NProbability[ x^2 + y^2 <= 1, {x, y} \[Distributed] 
BinormalDistribution[{0, 0}, {1, 1}, 0]] // Timing

また

NProbability[x^2 + y^2 <= 1, x \[Distributed] 
NormalDistribution[0, 1] && y \[Distributed] 
NormalDistribution[0, 1] ] // Timing

両方与え{0.031, 0.393469}ます。

n標準法線の二乗和は分散されるため、とおよびが分散されるChiSquare[n]、より合理化された式NProbability[z < 1, z \[Distributed] ChiSquareDistribution[2]]が得られます。タイミングは上記と同じです: .z=x^2+y^2xyNormalDistribution[0,1]{0.031, 0.393469}

編集: タイミングは、8G メモリ (MMA 8.0.4) を搭載した Vista 64 ビット Core2 Duo T9600 2.80GHz マシンの場合です。このマシンでの Yoda のソリューションにはタイミングがあり{0.031, 0.393469}ます。

EDIT 2: を使用したシミュレーションChiSquareDistribution[2]は、次のように実行できます。

(data = RandomVariate[ChiSquareDistribution[2], 10^5]; 
  Probability[w <= 1, w \[Distributed] data] // N) // Timing

利回り{0.031, 0.3946}

編集 3: タイミングの詳細:

為に

First@Transpose@Table[Timing@
  NProbability[x^2 + y^2 <= 1, {x, y} \[Distributed] 
  BinormalDistribution[{0, 0}, {1, 1}, 0]], {10}]

私は得る {0.047, 0.031, 0.031, 0.031, 0.031, 0.016, 0.016, 0.031, 0.015, 0.016}

為に

First@Transpose@Table[Timing@
NProbability[x^2 + y^2 <= 1, 
 x \[Distributed] NormalDistribution[0, 1] && 
  y \[Distributed] NormalDistribution[0, 1] ], {10}]

私は得る{0.047, 0.031, 0.032, 0.031, 0.031, 0.016, 0.031, 0.015, 0.016, 0.031}

為に

First@Transpose@Table[Timing@
NProbability[z < 1, 
 z \[Distributed] ChiSquareDistribution[2]], {10}]

私は得る{0.047, 0.015, 0.016, 0.016, 0.031, 0.015, 0.016, 0.016, 0.015, 0.}

ヨーダのために

First@Transpose@Table[Timing@(JointDistrbution = 
  1/(2 \[Pi] \[Sigma]^2) E^(-((x^2 + y^2)/(2 \[Sigma]^2))); 
 NIntegrate[
  JointDistrbution /. \[Sigma] -> 1, {y, -1, 
   1}, {x, -Sqrt[1 - y^2], Sqrt[1 - y^2]}]), {10}]

私は得る{0.031, 0.032, 0.015, 0., 0.016, 0., 0.015, 0.016, 0.016, 0.}

経験的推定のために

First@Transpose@Table[Timing@(Probability[w <= 1, 
 w \[Distributed] data] // N), {10}]

私は得{0.031, 0.016, 0.016, 0., 0.015, 0.016, 0.015, 0., 0.016, 0.016}た。

于 2011-12-20T04:20:59.983 に答える