多次评估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 ...
我正在尝试集成关于 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 ...