Integración de datos numéricos
Este ejemplo muestra cómo integrar numéricamente un conjunto de datos discretos de velocidad para aproximar la distancia recorrida. La familia integral
solo acepta identificadores de funciones como entradas, por lo que estas funciones no pueden utilizarse con conjuntos de datos discretos. Utilice trapz
o cumtrapz
cuando una expresión funcional no está disponible para la integración.
Visualizar los datos de velocidad
Considere los siguientes datos de velocidad y los datos de tiempo correspondientes.
vel = [0 .45 1.79 4.02 7.15 11.18 16.09 21.90 29.05 29.05 ... 29.05 29.05 29.05 22.42 17.9 17.9 17.9 17.9 14.34 11.01 ... 8.9 6.54 2.03 0.55 0]; time = 0:24;
Estos datos representan la velocidad de un automóvil (en m/s) extraídos a intervalos de 1 s en 24 s.
Represente los puntos de datos de velocidad y conecte cada punto con una línea recta.
figure plot(time,vel,'-*') grid on title('Automobile Velocity') xlabel('Time (s)') ylabel('Velocity (m/s)')
La pendiente es positiva durante periodos de aceleración, cero durante periodos de velocidad constante y negativa durante periodos de desaceleración. En el tiempo t = 0
, el vehículo está en reposo con vel(1) = 0
m/s. El vehículo acelera hasta que alcanza una velocidad máxima a t = 8
s de vel(9) = 29.05
m/s y mantiene esta velocidad durante 4 s. Después, desacelera a vel(14) = 17.9
m/s durante 3 s y finalmente llega al reposo. Puesto que esta curva de velocidad tiene varias discontinuidades, una sola función continua no puede describirla.
Calcular la distancia total recorrida
trapz
lleva a cabo una integración discreta utilizando los puntos de datos para crear trapezoides, por lo que resulta útil para gestionar conjuntos de datos con discontinuidades. Este método asume un comportamiento lineal entre los puntos de datos, y es posible que la precisión se reduzca cuando el comportamiento entre los puntos de datos es no lineal. Para ilustrarlo, puede dibujar trapezoides en la gráfica utilizando los puntos de datos como vértices.
xverts = [time(1:end-1); time(1:end-1); time(2:end); time(2:end)]; yverts = [zeros(1,24); vel(1:end-1); vel(2:end); zeros(1,24)]; p = patch(xverts,yverts,'b','LineWidth',1.5);
trapz
calcula el área bajo un conjunto de datos discretos dividiendo la región en trapezoides. Después, la función suma el área de cada trapezoide para calcular el área total.
Calcule la distancia total recorrida por el automóvil (que se corresponde con el área sombreada) integrando numéricamente los datos de velocidad utilizando trapz
. De forma predeterminada, se asume que el espacio entre puntos es 1
si utiliza la sintaxis trapz(Y)
. Sin embargo, puede especificar un espacio X
diferente, uniforme o no uniforme, con la sintaxis trapz(X,Y)
. En este caso, el espacio entre lecturas en el vector time
es 1
, por lo que es aceptable usar el espacio predeterminado.
distance = trapz(vel)
distance = 345.2200
La distancia recorrida por el automóvil en t = 24
s es de aproximadamente 345,22 m.
Representar la distancia acumulada recorrida
La función cumtrapz
está estrechamente relacionada con trapz
. Mientras que trapz
devuelve solo el valor final de integración, cumtrapz
también devuelve valores intermedios en un vector.
Calcule la distancia acumulada recorrida y represente el resultado.
cdistance = cumtrapz(vel); T = table(time',cdistance','VariableNames',{'Time','CumulativeDistance'})
T=25×2 table
Time CumulativeDistance
____ __________________
0 0
1 0.225
2 1.345
3 4.25
4 9.835
5 19
6 32.635
7 51.63
8 77.105
9 106.15
10 135.2
11 164.25
12 193.31
13 219.04
14 239.2
15 257.1
⋮
plot(cdistance) title('Cumulative Distance Traveled Per Second') xlabel('Time (s)') ylabel('Distance (m)')