R语言 用积分函数和单根函数解广义二重积分

kknvjkwl  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(334)

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

给定p = 0.10alpha = 1lambda = 4,求beta的值。
我们想对tc求这个函数的积分。然后用uniroot函数求beta的值,其中积分等于p
请参见下面的代码:

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

但是,它会抛出错误:
积分时出错(func 1,下限= c,上限= Inf,c = c,beta = beta):长度(下限)== 1非TRUE
答案应为0.444

aurhwmvo

aurhwmvo1#

我更正了拼写错误(将cen.p替换为p),并将func2func3的函数参数向量化,因为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.

相关问题