Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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)')

Figure contains an axes object. The axes object with title Automobile Velocity, xlabel Time (s), ylabel Velocity (m/s) contains an object of type line.

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);

Figure contains an axes object. The axes object with title Automobile Velocity, xlabel Time (s), ylabel Velocity (m/s) contains 2 objects of type line, patch.

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)')

Figure contains an axes object. The axes object with title Cumulative Distance Traveled Per Second, xlabel Time (s), ylabel Distance (m) contains an object of type line.

Consulte también

| |

Temas relacionados