借助蒙特卡罗方法,我需要确定Pi的值。 到目前为止,我有一个代码,通过一个介于0.1和1之间的圆半径的随机值给我Pi。接下来我需要做的是将变量半径绘制为Pi的数字,就像我试图在下面描述
|
Pi|~~~~~~~~~~~~ <- values
|
|______________
0.1 R 1
library("plotrix")
n = 400
z = runif(1, 0.1, 1)
R= z
x = runif(n, -R, R)
y = runif(n, -R, R)
plot(x, y, asp = 1, xlim = c(-1, 1))
#draw a square
rect( -R, -R, R, R)
#draw a circle
draw.circle(0, 0, R, nv = 1000, border = NULL, col = NA, lty = 1, lwd = 1)
#
#test if points are in the circle (Pin=points in circle)
pin = sum(ifelse(sqrt(x^2 + y^2 <= R^2), 1, 0))
#pi is given by (4*n in circle/n total)
4 * pin/n
plot(z, 4 * pin/n)
使用这段代码,我可以在整个图表中得到1分。我想要的是在图表上有100个点。所以很容易&#39;说,让代码通过不同的R确定100个pi值,并将它们绘制在一个图中。 这可能吗?我已经找了两天的答案,但到目前为止我没有取得任何进展..谢谢!
答案 0 :(得分:0)
如何计算函数并运行一百次?获得值后,您可以将它们全部绘制在一起。使用for循环可以完成同样的事情。
这是一个例子。让我们先创建一个函数ppi:
ppi<-function(N=1000) {
n = N
z = runif(1, 0.1, 1)
R= z
x = runif(n, -R, R)
y = runif(n, -R, R)
pin = sum(ifelse(sqrt(x^2 + y^2 <= R^2), 1, 0))
return(c(z, n, pin))
}
然后你可以运行100次(参见replicate()
),然后使用一些绘图功能绘制结果。