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的集成能力,但从来没有得到映射以太工作.
实际上有几种方法可以做到这一点.
最简单的方法是使用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)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |