多次评估R中的积分

Evaluating an integral in R multiple times

我正在尝试集成关于 x 的下一个功能

integrand <- function(x) {
f1 <- pnorm((1/sqrt(u/x))*( sqrt((t*u*v)/x) - sqrt(x/(t*u*v)) ))}

其中,

v=10
u=5

但是,考虑到 t 的不同值,我需要进行积分,因此尝试将一系列值定义为:

t=seq(0,100,0.1)

并将 sapply 函数用作:

data=sapply(t, function(x) integrate(integrand, lower = 0 , upper = 10000)$value )

我遇到了这些错误:

    Error in integrate(integrand, lower = 0, upper = 10000) : 
  evaluation of function gave a result of wrong length
In addition: Warning messages:
1: In (t * u * v)/x : longer object length is not a multiple of shorter object length
2: In x/(t * u * v) : longer object length is not a multiple of shorter object length
3: In (1/sqrt(u/x)) * (sqrt((t * u * v)/x) - sqrt(x/(t * u * v))) :
  longer object length is not a multiple of shorter object length

我没有运气。

如有任何帮助,我将不胜感激。

此致!

之前有位post有类似问题,有具体解决方法here

代码的结果为:

t=seq(0,100,0.1)
fu<- list()
int<- numeric()
for(i in 1:length(t))
  {
    fu[[i]] = function(x){
    f1 <- pnorm((1/sqrt(u/x))*( sqrt((t[i]*u*v)/x) - sqrt(x/(t[i]*u*v)) ));
  }
    int[i] = integrate(h[[i]], lower=0, upper=1000)$value
  }
  int

您仍然可以像这样使用 sapply

sapply(t, function(t) {
  integrate(function(x) {
    pnorm((1/sqrt(u/x))*( sqrt((t*u*v)/x) - sqrt(x/(t*u*v)) ))
  }, lower = 0, upper = 1000)$value
})

输出

[1]  0.000000  5.416577 10.251273 15.146418 20.084907 25.049283 ...