【发布时间】:2013-04-18 11:33:00
【问题描述】:
这是我正在处理的 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 曲线下的合适样本。我将如何编写这样的代码?
【问题讨论】:
-
恐怕我不明白你的问题……你想让我们用循环给你写一个解决方案吗?您自己尝试过什么来获得 1000 分?是什么让您认为
if声明是错误的?
标签: r function statistics probability