У меня есть функция f
, которая определяется с помощью функции g
. Я пытаюсь вычислить его энтропию h_f
. Я получаю ошибку the integral is probably divergent
. Мой код R выглядит следующим образом:
phi <- function(x, m, s) (1/sqrt(2*pi*s^{2}))*exp((-1/2*s^{2})*(x-m)^{2})
g <- function(x, p) p*phi(x, -1, 0.2)+(1-p)*phi(x, -0.5, 1)
f <- function(x, p) (1/x^{2})*g(log(x),p)
f1 <- function(x,p) (f(x,p)*(log(g(log(x),p))-2*log(x))) ##This is basically f(x)*log(f(x))
h_f <- function(p) -(integrate(f1, lower=0, upper=Inf, p=p)$value)
h_f <- Vectorize(h_f)
p <- seq(0,1, 0.01)
h_f(p)
Вещи, которые я пробовал : Я попытался установить res.tol
на другое число, которое изменило ошибку на number of subdivisions has exceeded
. Затем я понял, что вся ошибка сохраняется, возможно, потому что определение f
зависит от деления на x^{2}
, я попытался заменить нижний предел x
на 1e-5
, который работает хорошо и дает мне конечные значения для p
в [0,1]
. Однако я пытаюсь выяснить, как заставить функцию интегрирования выдавать NA, если x==0
. Я пробовал разные версии:
h_f <- function(p){
if(x==0) NA
else{
-(integrate(f1, lower=0, upper=Inf, p=p)$value)
}
}
Но, конечно, это не работает, потому что x
не найден в рамках h_f
. Я пробовал разные обходные пути, но я не понимаю, как это правильно. Возможно, мне не хватает чего-то очевидного, буду благодарен за любую помощь.