多次评估 R 中的积分
Posted
技术标签:
【中文标题】多次评估 R 中的积分【英文标题】:Evaluating an integral in R multiple times 【发布时间】:2021-07-07 15:14:32 【问题描述】:我正在尝试集成关于 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
我没有运气。
如果有任何帮助,我将不胜感激。
问候!
【问题讨论】:
对于初学者u/x
,当您的 seq
从 0 开始时,将是未定义的。然后你分配给f1
,但你的函数没有返回任何东西。您的意思是在正态分布函数中评估该函数吗?
导致您的错误的原因是 t
是长度为 1001 的向量。我相信您正在尝试遍历所有这些值并将其分配给您的函数中的 x
。但是,您的函数也是t
的函数。因此,它试图评估您的函数,其中u
、v
和x
都具有单个值,而t
具有 1001,这会引发错误。
感谢您的帮助,感谢您指出两个问题。我试图找到一种方法来评估每个“t”值的积分,假设在 t = 0.1 时评估积分,然后在 t = 0.2 时评估积分,依此类推。也许 sapply 函数不合适。
那么你要评估x
的价值是什么?
我正在考虑积分函数“lower = 0,upper = 10000”中定义的积分限制
【参考方案1】:
你仍然可以像这样使用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 ...
【讨论】:
【参考方案2】:上一篇帖子也有类似问题,具体解决方法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
【讨论】:
以上是关于多次评估 R 中的积分的主要内容,如果未能解决你的问题,请参考以下文章