这是我正在处理的 PDF:
fx = 0.3 if (0<=x<1)
0.1 if (1<=x<2)
0.25 if (2<=x<3)
0.15 if (3<=x<4)
0.2 if (4<=x<5)
0 otherwise
我必须编写一个函数 gen_xy ,它将生成一系列点 (X, Y) 均匀分布在 (0, 5) X (0, 0.5) 中,直到一个位于y = fx(x)
.
到目前为止,这是我的代码:
fx <- function(x) c(0, 0.3,0.1,0.25,0.15,0.20, 0)
[findInterval(x, c(-Inf, 0:5, Inf))]
x <- runif(n,0,5)
fx <- stepfun(x = 0:5, y = c(0,0.3,0.1,0.25,0.15,0.20,0))
plot(fx, ylim = c(0,0.5),xlim = c(0,5), main = 'f(x)')
现在这是我为我的函数编写代码的尝试:
gen_xy <- function() {
done=0
while(done==0) {
x=runif(1,0,5)
y=runif(1,0,0.5)
print(c("x,y",c(x,y)))
if(y < fx(x)) {
done=1
}
}
xy=c(x,y)
xy
}
但我认为这部分if(y < fx)
是错误的?
然后,我需要生成 1000 个点的样本并绘制它们以检查它们是否是y=fx
. 我将如何编写这样的代码?