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?
¿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)
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)
Answered by césar huamani ninahuanca on August 1, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP