Función R “uniroot”: obtener algún error.
R
FX <- function(x)(3/4)*(1-x^2)
M <- 5000
X2 <- rep(NA,M)
for (i in 1:M) {
U2 <- runif(1)
fct <- function(x)FX(x)-U2
X2[i] <- uniroot(fct,c(-1,1))$root
}
He intentado hacer este código R, pero siempre obtengo un error que dice:
Error en uniroot(fct, c(-1, 1)) :
valores de f() en los extremos no de signo opuesto
No entiendo cuál es el problema y cómo solucionarlo.
davy.ai
El mensaje de error indica que la función
fct
, evaluada en los extremos del intervaloc(-1,1)
, no tiene signos opuestos. En otras palabras,fct(-1)
yfct(1)
deberían tener signos opuestos para queuniroot
funcione correctamente. Esta es una condición necesaria para queuniroot
converja a una raíz dentro del intervalo dado.Para solucionar este problema, puedes intentar cambiar el intervalo de
uniroot
o modificar la funciónFX
. Una posible solución es cambiar el intervalo ac(-0.999, 0.999)
en lugar dec(-1,1)
, ya que la funciónFX
no está definida enx = ±1
. Otra posible solución es modificarFX
agregando una pequeña constante al denominador para evitar la división por cero. Por ejemplo, podrías definirFX
como:Esto asegura que la función es continua y tiene signos opuestos en los extremos del intervalo
c(-1,1)
.Alternativamente, puedes intentar usar un algoritmo de búsqueda de raíces diferente, como
uniroot.all
ointegrate
, según tus necesidades específicas.