通过时间在R中集成函数

时间:2015-04-10 21:54:05

标签: r function apply integrate

对于下限= 0和上限= t,我想将以下函数集成到t中。我可以用下面的代码做到这一点,但我的最终目标是为每个t设置一个积分值。即使我使用序列而不是值,或者如果我尝试使用sapply,我仍然无法在t的每一步获得积分值。

#initialize constants
kap=-0.1527778
alph0<-6
b<-0
po<-0.01
t<-100
gp_st<-integrate(function(t) (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap),lower=0,upper=t)$value

#try alternate where t is now a sequence 
t<-seq(1:100)
gp_st2<-function(h) sapply(h,gp_st) #still gives length of 1

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试将gp_st作为上限的函数,如下所示:

gp_st <- function(h) {
  integrate(function(t) (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap),lower=0,upper=h)$value
}

然后你可以按照预期使用sapply:

t<-seq(1:100)
gp_st2 <- sapply(t, gp_st)

现在gp_st2是一个长度为100的数字向量。

答案 1 :(得分:0)

问题是你正在评估gp_st中的积分,而你不想这样做。您需要以下内容:

ff = function(t) {
  (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap)
}
sapply(1:100, function(ul) {
  integrate(ff, lower = 0, upper = ul)$value
})

自然有更有效的方法可以做到这一点。