2011-11-08 15 views
9

Estoy buscando calcular la integral indefinida de una ecuación.Indefinido Integral en R

Tengo datos de un avance del acelerómetro en R a través de un programa C visual, y desde allí fue lo suficientemente simple como para llegar a una ecuación para representar la curva de aceleración. Eso está bien, pero también necesito calcular la velocidad del impacto. Desde mi comprensión de los buenos viejos tiempos de la escuela secundaria, la integral indefinida de mi curva de aceleración arrojará la ecuación para la velocidad.

Sé que es bastante fácil realizar la integración numérica con la función integrate(), ¿hay algo que sea comparable para una integral indefinida?

+1

Si se refiere a una integral * indefinida * simbólica, entonces no. (Pero existen interfaces, por ejemplo, para Yacas ["otro sistema de álgebra computacional"] que podría hacerlo). Por otro lado, me parece que toda integración numérica es en cierto sentido definida (es decir, para obtener una respuesta, debe especifica los límites). –

Respuesta

1

Si las NA que menciona son informativas en el sentido de indicar que no hay entrada de aceleración, entonces deben reemplazarse por ceros. Supongamos que usted tiene los datos en acc.vec y el dispositivo de grabado a una velocidad de rec_per_sec:

acc.vec[is.na(ac.vec)] <- 0 
vel.vec <- cumsum(acc.vec)/recs_per_sec 

No creo que la construcción de un mejor ajuste de la curva va a mejorar su precisión en este caso. Para trazar la velocidad en función del tiempo:

plot(1:length(acc.vec)/recs_per_sec, vel.vec, 
     xlab="Seconds", ylab="Integrated Acceleration = Velocity") 
+0

¡Gracias por la respuesta! No hay NA's en los datos, la entrada del acelerómetro es siempre un valor, nunca he visto un valor de 0 salir de mi buffer. ¡Gracias por la pista de velocidad contra el tiempo! ¡Funciona genial! Casi había renunciado a eso y luego pensé en volver a comprobarlo aquí una vez más. – user1003131

9
library(Ryacas) 
x <- Sym("x") 
Integrate(sin(x), x) 

da

expression(-cos(x)) 

Una forma alternativa:

yacas("Integrate(x)Sin(x)") 

Usted puede encontrar la referencia de funciones here

+2

Además de Ryacas, está el paquete rSymPy, que usa SymPy de Python para CAS. – jthetzel

1

Como dijo Ben, tratar el paquete Ryacas para el cálculo de la primitiva de Una función. Pero probablemente deba preguntarse si realmente desea generar una función continua que solo se aproxime a sus datos en primer lugar (errores de ajuste). Me quedaría con la integración numérica de tus datos reales. Tenga en cuenta la incertidumbre en cada punto de datos, por supuesto.

+0

Por supuesto, podría caber una spline suavizado (http://stackoverflow.com/questions/7953135/r-perfect-smoothing-curve) e integrarlo ... –

+0

¡Gracias a todos por la entrada! Estaba buscando la integral indefinida porque también quería trazar el gráfico de Velocity - Time (para fines visuales ... no tiene que ser increíblemente preciso). Gracias por el consejo sobre Yacas, pero no pareció gustarle la función que le di (NA producida por coacción). Supongo que podría integrar incrementalmente a través de mi función de aceleración ya que la velocidad en un punto es igual a la integración desde 0 hasta ese punto; sin embargo, para obtener una curva decente requeriría un número sustancial de iteraciones. – user1003131