AnswerBun.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!

Related Questions

como paginar una list en angular

1  Asked on January 4, 2022 by user184448

     

Filtrar sólo si el campo no está vacío c#

2  Asked on January 4, 2022 by l-ronquillo

     

Mostrar AM/PM y ordenar fecha en tabla

1  Asked on January 4, 2022 by jj-rr

 

No se guarda los datos en sqlite3

1  Asked on January 4, 2022

     

¿como auto mapear con automapper-js?

0  Asked on January 4, 2022 by anonymous-programer

       

Filtrar informacion de un Datatable con instruccion IN

1  Asked on January 4, 2022 by elnapster

     

Problema SCSS / CSS

1  Asked on January 1, 2022 by alfonso-perez

     

Eloquont Laravel filtrar anidadamente

0  Asked on January 1, 2022

   

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir