该图说明了我的绘图目标。在此图像上,忽略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。
定义所需的功能:
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)
归档时间: |
|
查看次数: |
7574 次 |
最近记录: |