TransWikia.com

Graficar una función con integrales en R

Stack Overflow en español Asked by Sebastian Soto on August 1, 2020

estoy tratando de hacer unos gráficos en R pero no logro nada con la función curve(). El gráfico corresponde a los valores de x y los valores de F(x). La función creada es la siguiente:

F <- function(a) {
        return(ifelse (a < 0, integrate(function (x) 0.5*exp(x),-Inf, a)$value,
                       integrate(function (x) 0.5*exp(x),-Inf, 0)$value+ integrate(function (x) 0.5*exp(-x),0, a)$value ))}

luego al evaluar

curve(F,-15,15)

me indica lo siguiente:

Error in integrate(function(x) 0.5 * exp(x), -Inf, a) :
length(upper) == 1 is not TRUE

Alguna como poder pasar este error y poder plotear la función?

2 Answers

¿Que es lo que hace curve(F,-15,15)? de manera muy básica, podríamos decir que genera un intervalo de números de -15 a 15, le aplica la función F que debería retornar la misma cantidad de puntos del intervalo y dibuja una curva que pasa por dichos puntos.

En tu función en parte, estas asumiendo que el parámetro a es un valor escalar cuando en realidad es un vector, algo que podemos verificar:

F <- function(x){cat(length(x));x}
curve(F, -15, 15)

101 # La salida, el intervalo es un vector de 101 valores

por ejemplo veamos aquí:

integrate(function (x) 0.5*exp(-x),0, a)$value

En este caso, a es la entrada del parámetro UPPER dónde espera un valor escalar (único) y no un vector como está recibiendo. Para hacer lo que buscas, de la manera que lo haces, deberías recorrer el vector de entrada y en cada elemento invocar integrate() algo así:

F <- function(a) {
  ret = c()
  for (e in a) {
    if (e < 0) {
      ret <- c(ret, integrate(function (x) 0.5*exp(x),-Inf, e)$value)
    } else {
      ret  <- c(ret, integrate(function (x) 0.5*exp(x),-Inf, 0)$value+ integrate(function (x) 0.5*exp(-x),0, e)$value)
    }
  }
  ret
}
curve(F,-15,15)

introducir la descripción de la imagen aquí

Answered by Patricio Moracho on August 1, 2020

Primeramente, no entiendo porque te sale el error. Si el valor a es sólo un elemento. El error me desconcierta.

Pero, al no poder corregir, lo que se podría hacer es generar un for para poder obtener el rango de la función. Y luego plotearlo.

x<-c()
for (i in seq(-15,15,.01)) {
  x<-c(x,F(i))
}

plot(seq(-15,15,.01),x)

Una forma sería así. El resultado sería el siguiente. introducir la descripción de la imagen aquí

Answered by césar huamani ninahuanca on August 1, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP