簡體   English   中英

使用 integrate 和 uniroot 函數求解不正確的二重積分

[英]Solve improper double integral using integrate and uniroot functions

我們有一個 function.t ~ Weibull(alpha, lambda) 和 c ~ Exponential(beta):

在此處輸入圖像描述

給定p = 0.10alpha = 1 lambda = 4 找出beta的值。

我們想將t的 function 集成到c 然后使用uniroot function 找到積分等於pbeta值。

請參閱下面的代碼:

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,下部= c,上部= Inf,c = c,beta = beta):長度(下部)== 1不正確

答案應該是0.444

我更正了拼寫錯誤(將cen.p替換為p )並將 function arguments 向量化為func2func3 ,因為integrate function 返回一個值(標量)。 但是,作為第一個參數, 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

Output:

[1] 0.4444242.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM