在Mathematica中集成

500*_*500 6 integration wolfram-mathematica gaussian

我希望得到一个不同的解决方案来解决我已经"象征性地"解决的问题并通过一些模拟.现在,我想知道如何使用Mathematica直接进行集成.

请考虑一个由r = 1的磁盘代表的目标,以(0,0)为中心.我想模拟我投掷飞镖的概率.

现在,我没有偏见投掷它们,平均而言我将击中中心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))
Run Code Online (Sandbox Code Playgroud)

当这两个分布以0为中心,方差等于1时,我的联合分布变为双变量高斯,如:

1/(2 \[Pi]\[Sigma]^2) E^(-((x^2 + y^2)/(2 \[Sigma]^2)))
Run Code Online (Sandbox Code Playgroud)

所以我需要知道我达到目标的概率或者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
Run Code Online (Sandbox Code Playgroud)

我觉得有更优雅的方法来解决这个问题,使用Mathematica的集成能力,但从来没有得到映射以太工作.

abc*_*bcd 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}
Run Code Online (Sandbox Code Playgroud)

这是另一种经验实现的方法(类似于上面的例子),但比使用慢很多NIntegrate:

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

Out[2]= {5.03216, 0.39281}
Run Code Online (Sandbox Code Playgroud)