2011-11-08 20 views
9

Sto cercando di calcolare l'integrale indefinito di un'equazione.Integrale indefinito in R

Ho dati da un accelerometro in R attraverso un programma visivo C, e da lì è stato abbastanza semplice elaborare un'equazione per rappresentare la curva di accelerazione. Va tutto bene, tuttavia ho bisogno di calcolare anche la velocità d'impatto. Dalla mia comprensione dei buoni tempi del liceo, l'integrale indefinito della mia curva di accelerazione produrrà l'equazione per la velocità.

So che è abbastanza facile eseguire l'integrazione numerica con la funzione integrate(), c'è qualcosa che è paragonabile per un integrale indefinito?

+1

Se si intende un integrale * simbolico * indefinito, quindi no. (Ma ci sono interfacce, ad esempio, per Yacas ["un altro sistema algebrico di computer"] che potrebbe farlo.) D'altra parte, mi sembra che tutta l'integrazione numerica sia in un certo senso definita (cioè per ottenere una risposta bisogna specificare i limiti). –

risposta

1

Se le NA di cui si parla sono informative nel senso di non indicare input di accelerazione, devono essere sostituiti da zero. Supponiamo di avere i dati in acc.vec e il dispositivo registrato a una velocità di rec_per_sec:

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

Non credo che la costruzione di una migliore curva di adattamento sta per migliorare la vostra precisione in questo caso. Per tracciare la velocità in funzione del tempo:

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

Grazie per la risposta! Non ci sono NA nei dati, l'input dell'accelerometro è sempre un valore, non ho mai visto un valore di 0 uscire dal mio buffer. Grazie per il suggerimento di velocity vs time! funziona alla grande! Avevo quasi rinunciato, quindi ho pensato di tornare qui ancora una volta. – user1003131

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

expression(-cos(x)) 

Un modo alternativo:

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

È possibile trovare la funzione di riferimento here

+2

Oltre a Ryacas, esiste il pacchetto rSymPy, che utilizza Python SymPy per il CAS. – jthetzel

1

Come ha detto Ben, provare il pacchetto Ryacas per il calcolo della primitiva di una funzione. Ma probabilmente dovresti chiederti se vuoi veramente generare una funzione continua che approssimi solo i tuoi dati in primo luogo (errori di adattamento). Mi terrei con l'integrazione numerica dei tuoi dati reali. Tieni presente l'incertezza in ogni punto di dati, ovviamente.

+0

Ovviamente, è possibile adattare una spline livellante (http://stackoverflow.com/questions/7953135/r-perfect-smoothing-curve) e integrarlo ... –

+0

Grazie a tutti per l'input! Stavo cercando l'integrale indefinito perché volevo tracciare il grafico Velocity-Time (per scopi visivi ... non deve essere incredibilmente accurato). Grazie per il suggerimento su Yacas, ma non mi è sembrata gradita la funzione in cui l'ho passata (NA prodotta da coercizione). Suppongo di poter integrare in modo incrementale la mia funzione di accelerazione in quanto la velocità in un punto è uguale all'integrazione da 0 a quel punto, tuttavia per ottenere una curva decente richiederebbe un numero considerevole di iterazioni. – user1003131