通过时间在R中积分函数
我想对以下关于t的函数进行积分,下界=0,上界=t。我可以用下面的代码来实现这一点,但我的最终目标是为每个t求一个积分值。即使我把t作为一个序列而不是一个值,或者如果我尝试使用sapply,我仍然无法在t的每一步得到积分的值通过时间在R中积分函数,r,function,apply,integrate,R,Function,Apply,Integrate,我想对以下关于t的函数进行积分,下界=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
#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
#初始化常量
kap=-0.1527778
alph0尝试将gp\u st
作为上限函数,如下所示:
gp_st <- function(h) {
integrate(function(t) (1-alph0/(alph0+b*t)*(1-po^kap))^(1/kap),lower=0,upper=h)$value
}
gp_st问题是您正在计算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
})
当然,有更有效的方法可以做到这一点。现在,下一步。。。如果我想计算这个函数的几个值,b,po,kap,alph0。。。我猜有一种更有效的方法可以做到这一点,而不是将apply语句嵌套在我想要改变的每个参数的循环中?向量化可能会起作用(使用所有要尝试的值的向量,并将输出设置为数组),但它在概念上可能不直观。循环使用您想要尝试的不同参数组合并不一定不好——尝试一下,看看运行时是什么。谢谢,现在我想评估函数中的几个常量值(alph0,b,po,kap)。您是否建议将这些存储在数据框中,并为每个参数附加值?
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
})