Para la estimación de la probabilidad de un evento con probabilidad pequeña, es posible que desee probar para estimar la probabilidad de un cambio de variable aleatoria que asigna una mayor probabilidad de masa para el evento. Así que, en su caso, es posible que desee cambiar el original de $N(0, 1)$ a $N(100, 1)$ porque para la segunda r.v. la probabilidad de que sea mayor que 100 es $\frac{1}{2}$. Así, usted está buscando un cambio de la medida en la forma:
$$
\frac{dQ}{dP} = \frac{dN(0,1)}{dN(100,1)} = exp(-100y+5000),
$$
donde $P$ es la probabilidad de medida asociados con $N(0, 1)$ y $P$ es la probabilidad de medida asociados con $N(100, 1)$.
Y por lo tanto para un evento $A = \{Y > 100\}$ por el Radon-Nikodym teorema podemos obtener:
$$
P(A) = E_{P}[exp(-100Y+5000)I(a)] \approx \frac{1}{n} \sum_{i=1}^{n} e^{-100y_i + 5000} I(y_i > 100) \\
= e^{-5000} \frac{1}{n} \sum_{i=1}^{n} e^{-100(y_i-100)} I(y_i > 100)
$$
Mediante la ejecución de, por ejemplo, este código de C++:
#include <vector>
#include <random>
#include <iostream>
int main()
{
std::vector<long double> estimation;
int simulation_length { 1000000 };
std::default_random_engine generator;
std::normal_distribution<long double> distribution(100.0, 1.0);
long double pick;
long double estimation_sum { 0.0 };
for (int i = 0; i != simulation_length; ++i)
{
pick = distribution(generator);
if (pick > 100)
{
estimation.push_back(exp(-100 * (pick - 100)));
}
}
for (double i : estimation)
{
estimation_sum += i;
}
std::cout << estimation_sum / simulation_length << std::endl;
return 0;
}
usted obtener la salida 0.00400264. Multiplicando por exp(-5000), se obtiene 1.34876725857872×10^(-2174), que está muy cerca del valor real (es decir, 1.34417907674465×10^(-2174), obtenida a través de Mathematica)