gpt4 book ai didi

r - 在紧凑支持 [0,alpha] 上集成类似 beta 函数的函数,alpha < 1

转载 作者:行者123 更新时间:2023-12-01 23:58:20 25 4
gpt4 key购买 nike

我想集成以下名为 betalog 的函数

 g <- function(x,a,b){
if (a < 0 | b < 0) stop()
temp <- (a-1)*log(x) + (b-1)*log(1-x)
return( exp(temp) )
}

betalog<- function(x,a,b)
{
temp <- g(x=x,a=a,b=b)* log(x/(1-x))
return( temp )
}

函数 g 是 beta 函数的被积函数。理论上,如果 0 < alpha < 1,且 a > 0,b >0,betalog 应该在任何 [0,alpha] 区间内可积。但是,我无法在数值上将 betalog 与非常小的 a 积分:

 a <- 0.00001
b <- 1
alpha <- 0.5
integrate(betalog,a=a,b=b,lower=0,upper=alpha,subdivisions=1000000L)

Error in integrate(betalog, a = a, b = b, lower = 0, upper = alpha, subdivisions =
1000000L) :
non-finite function value

事实上,当 a 非常小时,我什至无法使用 R 积分函数计算不完整的 beta 函数:

 integrate(g,a=a,b=b,lower=0,upper=alpha,subdivisions=1000000L)

Error in integrate(g, a = a, b = b, lower = 0, upper = alpha, subdivisions = 1000000L) :
roundoff error is detected in the extrapolation table

任何人都可以告诉我在 R 中集成这种不完整的类似 beta 的函数的提示吗?

最佳答案

> betalog(0, a, b)
[1] -Inf

您的函数在下界处是奇异的。回想一下,要计算不正确的积分,您必须用虚拟变量替换奇异边界,并从正确的一侧向该边界取极限。特别是,

 >  integrate(betalog,a=a,b=b,lower=0.000001,upper=alpha,subdivisions=10000000L)
-94.60292 with absolute error < 0.00014
> integrate(betalog,a=a,b=b,lower=.Machine$double.xmin * 1000,upper=alpha,subdivisions=10000
-244894.7 with absolute error < 10
> integrate(betalog,a=a,b=b,lower=.Machine$double.xmin,upper=alpha,subdivisions=10000000L)
Error in integrate(betalog, a = a, b = b, lower = .Machine$double.xmin, :
non-finite function value

我怀疑你的积分发散,但这可能很棘手,因为即使是最先进的符号代数系统也无法证明:

http://www.wolframalpha.com/input/?i=Integral%28x%5E%280.00001+-1%29+ln%28x%2F%281-x%29%29%2C+x%2C0%2C+0.5%29

无论如何,R 都不是解决这个问题的正确工具。

关于r - 在紧凑支持 [0,alpha] 上集成类似 beta 函数的函数,alpha < 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com