[英]How to plot a function that calculates the PDF?
这是我的函数计算的PDF:
fx = 0.3,如果(0 <= x <1)0.1,如果(1 <= x <2)0.25,如果(2 <= x <3),0.15,如果,(3 <= x <4),如果,(4 <= x < 5)否则为0
这是我的编码:
fx = function(x)
{
if ((0<=x) & (x<1)) 0.3
else if ((1<=x) & (x<2)) 0.1
else if ((2<=x) & (x<3)) 0.25
else if ((3<=x) & (x<4)) 0.15
else if ((4<=x) & (x<5)) 0.2
else 0
}
现在我该如何绘制y = fx?
我试过了:
x <- runif(n,0,5)
y <- fx(x)
plot(x, y, type='1', xlim=c(0,5), ylim=c(0,5))
但是我得到一个错误,即“ x”和“ y”的长度不同?
您的问题归结为以下事实:您的函数没有正确向量化(不能很好地处理向量)。
如果您使用上一个问题中完全相同的问题 接受的解决方案 ,那么您就不会有任何问题
例如
# a solution that will work and be properly vectorized
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)
plot(x, fx(x))
如果要绘制步进函数(此pdf就是这样),则可以使用stepfun
例如
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.4),xlim = c(0,5), main = 'f(x)')
如果您不希望添加积分,那么
plot(fx, ylim = c(0,0.4),xlim = c(0,5), main = 'f(x)', do.points=FALSE)
如果要向量化阶跃函数,请使用向Vectorize
vfx <- Vectorize(fx)
您的PDF未矢量化。 尝试这个:
fx <- function(x) {
ifelse((0<=x) & (x<1), 0.3,
ifelse((1<=x) & (x<2), 0.1,
ifelse((2<=x) & (x<3), 0.25,
ifelse((3<=x) & (x<4), 0.15,
ifelse((4<=x) & (x<5), 0.2,
0)))))
}
x <- seq(0, 6, length.out=n)
plot(x, fx(x))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.