我正在尝试创建一个由3个指数函数组成的复合函数:
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 :(得分:0)
你的病情应该是:
259200<x && x<345600
答案 1 :(得分: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绘制分段函数,而我在前面的代码中遇到的问题是只绘制了分段函数的第一部分。