簡體   English   中英

如何繪制簡單的分段線性函數?

[英]How to plot a simple piecewise linear function?

在此輸入圖像描述 圖像說明了我的繪圖目標。 在此圖像上,忽略x1上的垂直斜率。 完全沒有意義。 在x取值x1或更大值后,函數根本沒有定義,或者y取0。

我有以下分段線性函數,有兩個條件。 你如何在R中繪制? 從語義上講,我想聲明:“如果x等於或大於20(x1),則y必須為零,否則y等於mx + y1-mx1。” 該斜率muss減小並且在20處將y設置為零。

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

到目前為止,我試過這個(不確定如何設置y1)

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

當然,這會導致錯誤。

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

我不確定如何表示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
}

然后使用它:

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

就那么簡單。

只是插圖

如果你想要連接點的線,你可以做

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

對於這種情節,最簡單的可能是使用函數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM