Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将函数矢量化以便在R中使用Integrate_R_Integration_Vectorization_Numerical Methods_Integrate - Fatal编程技术网

将函数矢量化以便在R中使用Integrate

将函数矢量化以便在R中使用Integrate,r,integration,vectorization,numerical-methods,integrate,R,Integration,Vectorization,Numerical Methods,Integrate,我正在建立一个随机变量的pdf,为了做到这一点,我需要计算一个函数的积分。pdf如下图所示,我特意将指数分开,以便更容易阅读和区分与集成下的x相关的部分 已知alpha、beta和miu的值,并对t_k的值进行求和,这些值也被给出并称为 我读过无数关于如何在R中使用矢量化的帖子、ppt演示等,但我不得不承认,我仍然不明白那里发生了什么 我以为我已经在代码中解决了这个问题,但是当我使用这里提供的数据集运行它时() testintegrate需要能够接受x值向量并生成y值向量。。。因此需要对被积

我正在建立一个随机变量的pdf,为了做到这一点,我需要计算一个函数的积分。pdf如下图所示,我特意将指数分开,以便更容易阅读和区分与集成下的
x
相关的部分

已知
alpha、beta和miu
的值,并对
t_k
的值进行求和,这些值也被给出并称为

我读过无数关于如何在R中使用矢量化的帖子、ppt演示等,但我不得不承认,我仍然不明白那里发生了什么

我以为我已经在代码中解决了这个问题,但是当我使用这里提供的数据集运行它时()


test
integrate
需要能够接受x值向量并生成y值向量。。。因此需要对被积函数进行“矢量化”。@BondedDost我知道有两种方法可以确保用户定义的函数“矢量化”:一种是使用“矢量化”命令(就像我尝试过的那样),另一种是重新编写函数,对吗?但是,以“矢量化”形式重新编写函数意味着什么呢?无论函数在何处求值,函数的方程都是相同的吗?如果在表达式中使用所有向量化函数,那么返回的对象将是相同长度的向量。(
sum
不是“向量化的”,而是
+
是。)所以,区别在于如果我有一个向量,比如说
Bha,你的意思是如果我做
sum(c(1,2,3),c(5,6,7))
我得到的是一个数字而不是一个向量吗?
Warning messages:
1: In values[i] <- integrate(Vectorize(integrand, vectorize.args = "x"),  ... :
number of items to replace is not a multiple of replacement length$
## Pdf function for the random variable (1-D)

probability.function=function(paramss, event.times, length.interval, granularity.interval) {

tt<-sort(event.times)
li<-length.interval
gi<-granularity.interval  
s<-seq(tail(tt,1), tail(tt,1)+li, by=gi) #seed.times on which I compute the value of the pdF (starting point is the last occurence time)

parr1<-paramss[1]
parr2<-paramss[2]
parr3<-paramss[3]

integrand <- function(x, top, params, data, seed.time) {

    t<-sort(data)
    par1<-params[1]
    par2<-params[2]
    par3<-params[3]
    top<-top
    s<-seed.time

    value <- (par1 + sum(par2*exp(-par3*(x - t)))) * 
             (par1 + sum(par2*exp(-par3*(top - t))) + par2*exp(-par3*(top - x))) * 
             exp(-par1*(x-tail(t,1))) * 
             exp(-par2/par3*sum(exp(-par3*(tail(t,1)-t)) - exp(-par3*(top-t)))) *  
             exp(-par2/par3*(1-exp(-par3*(top-x))))            
    return(value)
}

values<- rep(0,length(s))
for(i in 1:length(values)) {
    values[i] <- integrate(Vectorize(integrand, vectorize.args='x'), lower=tail(tt,1), upper=s [i], top=s[i], params=c(parr1, parr2, parr3), data=tt, seed.time=s[i])
}

return(values)
}