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

fed*_*der 4 r

在此处输入图片说明 该图说明了我的绘图目标。在此图像上,忽略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如果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)
Run Code Online (Sandbox Code Playgroud)

当然,这会导致错误。

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ
Run Code Online (Sandbox Code Playgroud)

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

Dr.*_*ike 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
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

x<-1:50
plot(x, myf(x))
Run Code Online (Sandbox Code Playgroud)

就那么简单。

只是插图

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

plot(x, myf(x), ylab="Y", xlab="X"); lines(x, myf(x), col="red")
Run Code Online (Sandbox Code Playgroud)