Встроенная функция 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^2
и x
и y
распределены NormalDistribution[0,1]
.Синхронизация такая же, как указано выше: {0.031, 0.393469}
.
РЕДАКТИРОВАТЬ: Время для Vista 64-битный Core2 Duo T9600 2,80 ГГц с памятью 8G (MMA 8.0.4).Решение Йоды на этой машине имеет время {0.031, 0.393469}
.
РЕДАКТИРОВАТЬ 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}
.