Важность выборки в методе Монте-Карло (в C) - PullRequest
0 голосов
/ 24 сентября 2010

Привет, я написал код, который успешно аппроксимирует одно-, двух- и трехмерные интегралы, используя «грубую» методику выборки Монте-Карло.Теперь я хотел бы улучшить это, используя «выборку по важности», так как, очевидно, это может уменьшить дисперсию.Я прочитал несколько веб-страниц об этом, но ни одна не кажется особенно ясной.Как бы я реализовать что-то вроде этого?Большое спасибо.Jack

1 Ответ

0 голосов
/ 29 сентября 2010

Да, я нашел свою ошибку.Я не использовал обратный интеграл от PDF для вычисления «веса» каждой точки.Для тех, кому интересно, мой условный цикл читается как:

for (i = 0; i <= N; i++) {
    X = (double) rand() / (double) RAND_MAX;
   integrand = function(inverse(X)) / PDF(inverse(X));
   sum = sum + integrand;
   sum2 = sum2 + (integrand * integrand);
}
average = sum / N;
average2 = sum2 / N;

Где PDF - моя функция плотности вероятности, обратный - обратный интеграл от PDF.и среднее и среднее2 представляют и соответственно.

...