Вот мой код
buffon <- function(a,l)
{
n<-0
N<-0
repeat {N<-N+1
print(N)
p<-c(n/N)
# Sample the location of the needle's centre.
x<-runif(1,min = 0,max =a/2)
print(x)
# Sample angle of needle with respect to lines.
theta<-runif(1, 0, pi/2)
print(theta)
# Does the needle cross a line?
k<-l/2*sin(theta)
ifelse(x<=k,n<-n+1,n<-n)
p<-c(n/N)
print(p)
pie<-(2*l)/(p*a)
print(pie)
if(N>5000) {break}
}
}
Я пытаюсь оценить значение пи, используя идею иглы Буффона, однако, когда я пытаюсь: buffon(2,3)
, окончательная оценка составляет 3.8 , что намного больше 3,1 .Может ли кто-нибудь объяснить мне, есть ли какие-либо ошибки в моем коде, или я не могу использовать пи для оценки пи?
Добавление:
Я понял, что многие строки моего кода являются избыточными, поэтому янемного изменил его сегодня утром:
buffon01 <- function(n,a,l)
{
# Sample the location of the needle's centre.
x<-runif(n,min = 0,max =a/2)
# Sample angle of needle with respect to lines.
theta<-runif(n, 0, pi/2)
# Does the needle cross a line?
k<-l/2*sin(theta)
# l is the length of the needle
# a is the distance between to parallel line
v<-length(x[x<=k])
p<-c(v/n)
pie<-(2*l)/(p*a)
list("pi"=pie,"error"=abs(pie-pi))
}
Установив путь больше l, я смогу получить довольно близкий результат к 3.14 ... но полученный результат очень нестабилен ... как весли я снова проведу тот же эксперимент, 3.1 * может быть любым числом, кроме 4 ... Я проигнорировал некоторые другие проблемы в моей настройке?