2017-07-24 182 views
0

我試圖讓包括3個指數函數的複合函數:R:分段函數和繪製

rm(list=ls()) 
library(mosaic) 
library(ggplot2) 

# 3 functions 
NVent=makeFun(161*exp(-x/51028)~x) # from x [0;259200[ 
Vent3_4=makeFun(1262*exp(-x/48398)~x) # from x [0;345600[ 
SVent=makeFun(118*exp(-x/217427)~x) # from x [0;1036800] 

#composite function 
QTOT <- function(x) { 
    if (x<259200) return(NVent(x)+Vent3_4(x)+SVent(x)), 
    if (259200<x<345600) return(Vent3_4(x) + SVent(x)), 
    if (345600<x<1036800) return(SVent(x)) 
} 

卻得到一個錯誤:

Error: unexpected '<' in: 
" if (x<3) return(NVent(x)+Vent3_4(x)+SVent(x)) 
    if (3<x<" 
> if (4<x<12) return(SVent(x)) 
Error: unexpected '<' in " if (4<x<" 
> } 
Error: unexpected '}' in "}" 
> 

據瞭解我不正確寫入時間間隔,但一直沒有能夠糾正它,也找不到可以幫助我的例子,所以我會非常感謝你的輸入!

+0

'if(259200

回答

0

你的條件應該是:

259200<x && x<345600 
+0

謝謝,這工作:) – Gro

+0

你能接受我的答案嗎? ;) – Ale

+0

我做過了,但是得到的消息是一個信譽低於15的帖子被計算但沒有公開顯示,所以我想這就是爲什麼你看不到它:) – Gro

0

因此,對於未來用戶我只是想發佈的東西我終於發現寫這個分段函數的最佳方式:

NVent=makeFun(161*exp(-x/51028)~x) 
Vent3_4=makeFun(1262*exp(-x/48398)~x) 
SVent=makeFun(118*exp(-x/217427)~x) 

f1=makeFun(NVent(x)+Vent3_4(x)+SVent(x)~x) 
T1 <- 3*24*3600 
f2=makeFun(Vent3_4(x)+SVent(x)~x) 
T2 <- 4*24*3600 
f3=makeFun(SVent(x)~x) 
T3 <-12*24*3600 

#Piecewise function 
QTOT <- function(x) 
    (x > 0 & x <= T1)*f1(x) + (x > T1 & x < T2)*f2(x) + (x > T2 & x <T3)*f3(x) 

# Plot of piecewise function 
curve(QTOT, xlim = c(0,T3)) 

這讓我使用曲線或matplot繪製分段函數,而在前面的代碼中存在只有分段函數的第一部分被繪製出來的問題。