matlabacceleration

Given acceleration data and the corresponding time, how can I find the position and velocity in MATLAB?


I am given this data in an excel spreadsheet. So after importing it would I just do velocity = cumtrapz(t,y) and then position = cumtrapz(velocity)?


Solution

  • It is correct if the car starts from zero at distance zero. Otherwise you need to have the initial velocity there as well. Just notice that what you really do here is solving the the equation a = f(t) = dv/dt and further a = d^2s/dt^2 by identifying v as ds/dt. You does it by solving a system of ordinary differential equations:

    a = dv/dt
    v = ds/dt
    

    This can be done in a few ways. Eg with Euler forward.

    v'(t) = (v(t+h)-v(t))/h
    <=> v(t+h) = hv'(t)+v(t)
    

    where the derivate is given, which means that a = a(t). The iteration is initialized with the initial condition v(0), which must be given.

    When you know v then you go to s. Use again Euler forward as,

    s'(t) = (s(t+h)-s(t))/h
    <=> s(t+h) = hs'(t)+s(t)
    

    where you must know the initial condition s(0). If v(0) = s(0) = 0. Euler forward is an O(h) algorithm, but knowing the trick of solving the differential equations step by step doing the transformation s'(t) = v(t) it is also possible to do better. Now any runge-kutta method is available for you. And the method which you use, cumtrapz, is actually a O(h^2) method. This is a little more theory than what is custom in stackoverflow, but hopefully it will be helpful. There is also a matrix solution to second order boundary value problems, called Finite differance method, but that one is slighly more advanced. For further reading, start with

    http://en.wikipedia.org/wiki/Numerical_methods_for_ordinary_differential_equations