Решение интеграла с использованием uniroot

#r

Вопрос:

Предположим, у меня есть следующие данные

 n<-100 ki <- runif(n) yi<-rbinom(n,1,0.5) u<-runif(n)  

Я хотел бы решить уравнение

Это то же самое, что и решение

 #Attempt: Not sure about this library(rootSolve) library(pracma) Intz<-function(s){exp( ki* log( s))} fz <- function(z){  exp(yi) * quadinf( Intz , xa=0, xb= z)$Q     log(u)  }  z <- uniroot(fz, interval=c(0, 1e3) )$root z   

Я получаю следующую ошибку

 Error in uniroot(h, interval = c(1, 1000), tol = .Machine$double.eps^0.5) :   f() values at end points not of opposite sign  

Я получаю то же самое сообщение об ошибке, когда пытаюсь решить

Я должен в конечном итоге получить n значений z.

Комментарии:

1. Я не вижу quadinf в LaplacesDemon или rootSolve . Это внутри pracma , но пределы-это xa и xb , а не za и zb . Кроме того, вы никогда не определялись u . Что значит «не работает»? Если он возвращает ошибку, пожалуйста, скопируйте ее.

Ответ №1:

Интеграл от exp(ki*log(s)) по отношению к s от 0 до z просто z^(ki 1)/(ki 1) , так что вы можете решить для z , нет необходимости в числовом поиске корня или интегралов.

z <- (-(ki 1)*log(u)*exp(-yi))^(1/(ki 1))