如何绘制简单的分段线性函数?

时间:2013-09-11 09:25:04

标签: r

enter image description here 图像说明了我的绘图目标。在此图像上,忽略x1上的垂直斜率。完全没有意义。在x取值x1或更大值之后,函数根本没有定义。或者y得到0。

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

  F   (   X   )   =        {                                米           X           +                        ÿ             1                       -           米                        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。

2 个答案:

答案 0 :(得分:4)

定义您需要的功能:

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))

这很简单。

Just the illustration

如果您想要连接点的线条,您可以

plot(x, myf(x), ylab="Y", xlab="X"); lines(x, myf(x), col="red")

答案 1 :(得分:3)

对于这种情节,最简单的可能是使用函数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