es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la función fct, evaluada en los extremos del intervalo c(-1,1), no tiene signos opuestos. En otras palabras, fct(-1) y fct(1) deberían tener signos opuestos para que uniroot funcione correctamente. Esta es una condición necesaria para que uniroot converja a una raíz dentro del intervalo dado.

    Para solucionar este problema, puedes intentar cambiar el intervalo de uniroot o modificar la función FX. Una posible solución es cambiar el intervalo a c(-0.999, 0.999) en lugar de c(-1,1), ya que la función FX no está definida en x = ±1. Otra posible solución es modificar FX agregando una pequeña constante al denominador para evitar la división por cero. Por ejemplo, podrías definir FX como:

    FX <- function(x) (3/4) * (1 - x^2 + 1e-10)
    

    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 o integrate, según tus necesidades específicas.

Comments are closed.