Double integrate a precise series of numbers

2 vues (au cours des 30 derniers jours)
Med
Med le 2 Juin 2014
Modifié(e) : José-Luis le 4 Juin 2014
Hi All, I'm very new in Matlab and I would like to ask about this situation. I'm getting some data from my accelerometer, and I directly putting them in a file using this format:
X: 125, x: 103, Y: 127, y: 106, Z: 051, z: 043
X: 120, x: 100, Y: 129, y: 108, Z: 054, z: 045
X: 123, x: 103, Y: 127, y: 106, Z: 053, z: 044
....
X: 111, x: 093, Y: 135, y: 113, Z: 053, z: 044
I want to double integrate for example just the X axis, I know that I can use "integral2" to do that, but it needs a defined function as parameter. in my case is a set of numbers.
Note that the time is t = 1.5s, and the number of lines (readings from the accelerometer) is 78.
how can double integrate it using only this set of numbers?
Thanks in advance.
  18 commentaires
José-Luis
José-Luis le 4 Juin 2014
I don't know because I don't understand what you want. But if you want to obtain position and distance from the acceleration, it looks like A. Jenkins does what you want.
In that case you are not performing a double integral, you are integrating two times. That is not the same thing.
The only caveat would then be that you would need to assume a position and a speed at time t=0, if you don't know them.
Please accept A. Jenkins' answer if it helped you.
Med
Med le 4 Juin 2014
thank you @José for your clarification,

Connectez-vous pour commenter.

Réponse acceptée

A Jenkins
A Jenkins le 3 Juin 2014
I am going to guess that these are accelerations sampled at given times. The poster wants the integral over time to find the velocity, and the second integral over time to find the position. We need to approximate the integral with a cumulative sum.
% given
del_t=1.5; % seconds
accel_x=[125 126 126 127 128 129 131 126 126 125];
% need to know initial position and velocity
v_0=0;
x_0=0;
% time vector corresponding to data
t=del_t*(0:(length(accel_x)-1));
% compute integrals
vel_x=del_t*cumtrapz(accel_x)+v_0; %or cumsum()
pos_x=del_t*cumtrapz(vel_x)+x_0; %or cumsum()
% examine results
plot(t,accel_x, t,vel_x, t,pos_x);
legend('accel_x','vel_x','pos_x');
  3 commentaires
A Jenkins
A Jenkins le 4 Juin 2014
You didn't include time stamps with your data, so this makes a vector of time stamps to go with each data point.
The syntax (0:some_number) makes a vector like [0, 1, 2, 3, 4 ... some_number],
In this case, the vector of time stamps is the same length as the acceleration vector,
and then it is multiplied by del_t to get [0, 1.5, 3.0, ... 13.5].
Med
Med le 4 Juin 2014
I got it, thanks.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by