Метод Монте-Карло в R - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь выучить R. Я пытаюсь написать программу, которая вычисляет (приблизительно) число пи. Читать о методе

Мой код сейчас не работает!

f <- 0
s <- 0
range <- 10000
for (i in (1:range)) {
    v <- sample(1:range, 1)/range
    n <- sample(1:range, 1)/range

    if ( sqrt (v*v + n*n) <= 1) {
        f <- f + 1
    } else if ( v <=1 && n <= 1) {
        s <- s+1
    }
}

print ( f/s )

1 Ответ

0 голосов
/ 13 ноября 2018

Вот улучшенная версия вашего кода

range = 100000
v = runif(range)
n = runif(range)
f = sum(sqrt(v^2 + n^2) <= 1)

print(4 * f / range)

Вы должны использовать runif для получения образцов из униформы вместо sample(...) / range.

s не является необходимым, поскольку вы подсчитываете, сколько раз, f, ваша случайная точка (v,n) находится внутри круга в этом квадранте, деленная на количество попыток ничьей, что было бы range в вашем случае.

Вам нужно умножить на 4, так как f / range приблизительно соответствует площади в четверть круга юнитов.

...