首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:分段函数和绘图

R:分段函数和绘图
EN

Stack Overflow用户
提问于 2017-07-24 23:36:39
回答 2查看 1.3K关注 0票数 0

我正在尝试制作一个由3个指数函数组成的复合函数:

代码语言:javascript
运行
复制
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))
} 

但是会得到一个错误:

代码语言:javascript
运行
复制
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 "}"
> 

据我所知,我没有写正确的音程,但没有能够纠正它,也没有找到可以帮助我的例子,所以我真的很感谢你的意见!

EN

回答 2

Stack Overflow用户

发布于 2017-07-24 23:43:04

你的条件应该是:

代码语言:javascript
运行
复制
259200<x && x<345600
票数 0
EN

Stack Overflow用户

发布于 2017-07-27 17:34:05

因此,对于未来的用户,我只想发布我最终发现的编写此分段函数的最佳方法:

代码语言:javascript
运行
复制
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来绘制分段函数,而在前面的代码中,我遇到了只绘制分段函数的第一部分的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45284695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档