使用积分和单根函数求解不正确的二重积分

问题描述 投票:0回答:1

我们有一个函数。 t ~ 威布尔(alpha、lambda)和 c ~ 指数(beta):

鉴于

p = 0.10
alpha = 1
lambda = 4
。求
beta
的值。

我们希望将此功能集成到

t
,然后集成到
c
。然后使用
beta
函数求出
p
的值,其中积分等于
uniroot

请看下面的代码:

alpha = 1
lambda = 4
p = 0.10
func1 <- function(t, c, beta) {alpha * lambda * exp(-lambda * t^ alpha)*
                           beta * exp(- beta * c) }
func2 <- function(c, beta){integrate(func1, lower = c, upper = Inf, c=c, 
beta=beta)}
func3 <- function(beta){integrate(func2, lower = 0, upper = Inf, beta = 
beta)$value - cen.p}
uniroot(func3 ,lower = 0.001, upper = 10, extendInt = "yes")$root

但是它会抛出错误:

积分错误(func1,lower = c,upper = Inf,c = c,beta = beta) :长度(下)== 1 不是 TRUE

答案应该是

0.444

r numerical-integration uniroot
1个回答
0
投票

我更正了拼写错误(将

cen.p
替换为
p
),并对
func2
func3
进行了向量化函数参数,因为
integrate
函数返回一个值(标量)。然而,作为第一个参数
integrate
应该接受数值向量,而不是标量。

alpha <- 1
lambda <- 4
p <- 0.10
func1 <- function(t, c, beta)
  alpha * lambda * t^(alpha - 1) * exp(-lambda * t^alpha) * beta * exp(-beta * c)

func2 <- function(c, beta)
  integrate(func1, lower = c, upper = Inf, c = c, beta = beta)$value)

func3 <- function(beta)
  integrate(Vectorize(func2), lower = 0, upper = Inf, beta = beta)$value - p

uniroot(Vectorize(func3), lower = 0.001, upper = 10, extendInt = "yes")$root

输出:

[1] 0.4444242.
© www.soinside.com 2019 - 2024. All rights reserved.