5

在此处输入图像描述 该图像说明了我的绘图目标。在此图像上,忽略 x1 上的垂直斜率。完全无意义。在 x 取值 x1 或更大或 y 结果为 0 后,该函数根本没有定义。

我有以下具有两个条件的分段线性函数。你如何在 R 中绘制它?从语义上讲,我想说:“如果 x 等于或大于 20(x1),y 必须为零,否则 y 等于 mx+y1−mx1。” . 这个斜率必须减小并将 y 在 20 处设置为零。

f ( x ) = { m x + y 1 - m x 1 如果 0 ≤ x < x 1 0 如果 x ≥ x 1

到目前为止,我试过这个(不确定如何设置y1)

m <- -2
x1 <- 20
y1 <- ???
x <- seq(0, 100, 1)
fx <- (0 <= x & x < x1) * (m*x + y1 - m*x) + (x >= x1) * 0
plot(x, fx)

当然,这会导致错误。

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ

我不确定如何表示 y 和 y1。

4

2 回答 2

6

定义你需要的函数:

myf<-function(x, x1=20, y1=50, m=-2){ 
  firstInds<-intersect(which(x >= 0), which(x < x1)) 
  y<-x
  y[firstInds]<-m*x[firstInds]+y1-m*x1
  y[-firstInds]<-0
  y
}

然后使用它:

x<-1:50
plot(x, myf(x))

就那么简单。

只是插图

如果你想要连接点的线,你可以做

plot(x, myf(x), ylab="Y", xlab="X"); lines(x, myf(x), col="red")
于 2013-09-11T09:59:18.363 回答
4

对于这种情节,最简单的可能是使用 function curve

m <- -2
x1 <- 20
y1 <- 40

plot(NA,xlim=c(0,40),ylim=c(0,100), xaxs="i",yaxs="i") #Setting first an empty plot 
                                                       #where to plot your curve
curve(m*x+y1-m*x1, from=0, to=x1, add=TRUE)            #Then your curve
于 2013-09-11T09:44:31.737 回答