Wolfram mathematica 数学中的积分

Wolfram mathematica 数学中的积分,wolfram-mathematica,integration,gaussian,Wolfram Mathematica,Integration,Gaussian,我想通过一个小小的模拟,为我“象征性”解决的问题找到一个不同的解决方案。现在,我想知道如何直接使用Mathematica获得积分 请考虑一个以R=1为中心的目标,以(0,0)为中心。p> 现在,我没有任何偏差,也就是说,平均来说,我将击中中心mu=0,但我的方差是1 考虑到飞镖击中目标(或墙壁:-)时的坐标,我有以下分布,2高斯: XDistribution : 1/Sqrt[2 \[Pi]\[Sigma]^2] E^(-x^2/(2 \[Sigma]^2)) YDistribution :

我想通过一个小小的模拟,为我“象征性”解决的问题找到一个不同的解决方案。现在,我想知道如何直接使用Mathematica获得积分

请考虑一个以R=1为中心的目标,以(0,0)为中心。p> 现在,我没有任何偏差,也就是说,平均来说,我将击中中心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))
对于以0为中心且方差相等=1的这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
Total@ParallelTable[
如果[
欧几里德立场[{
随机变量[正态分布[0,Sqrt[1]],
随机变量[正态分布[0,Sqrt[1]]
}, {0, 0}] < 1, 1,0], {1000000}]/1000000

我觉得使用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}
这是另一种经验性的方法(类似于上面的示例),但比使用
NIntegrate
慢得多:

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

Out[2]= {5.03216, 0.39281}

(欧几里德距离[#,{0,0}]内置函数
n可能性也很快:

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

编辑3:有关计时的更多详细信息:

为了

我得到
{0.047,0.031,0.032,0.031,0.031,0.016,0.031,0.015,0.016,0.031}

为了

我得到
{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}]

First@Transpose@表[定时@(概率][w我觉得非常可疑的是,你和我的三种解决方案的时间安排完全相同……我当然会有很大的不同timings@yoda,很奇怪,不是吗?我正要问你是否可以在你的机器上运行上面的代码。这是我为你的三个方法(按你列出的顺序)和我的(上一个)得到的计时:
{0.035673,0.022273,0.097494,0.009067}
@yoda,谢谢你。我看到了很多变化(有些循环会重复出现几个数字)在我的计时中。显然我的环境中有一些非随机的东西?顺便说一句,我用一个新的内核会话和100次重复尝试了相同的计时,我得到了一个类似的循环模式。我发现Mathematica还能够集成[]
JointDistribution,这很有趣。
(data = RandomVariate[ChiSquareDistribution[2], 10^5]; 
  Probability[w <= 1, w \[Distributed] data] // N) // Timing
First@Transpose@Table[Timing@
  NProbability[x^2 + y^2 <= 1, {x, y} \[Distributed] 
  BinormalDistribution[{0, 0}, {1, 1}, 0]], {10}]
First@Transpose@Table[Timing@
NProbability[x^2 + y^2 <= 1, 
 x \[Distributed] NormalDistribution[0, 1] && 
  y \[Distributed] NormalDistribution[0, 1] ], {10}]
First@Transpose@Table[Timing@
NProbability[z < 1, 
 z \[Distributed] ChiSquareDistribution[2]], {10}]
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}]
First@Transpose@Table[Timing@(Probability[w <= 1, 
 w \[Distributed] data] // N), {10}]