Contenu principal

Intégration de données numériques

Cet exemple montre comment intégrer numériquement un jeu de données de vitesse discrètes pour approximer la distance parcourue. La famille integral accepte uniquement les handles de fonction en entrée. Ces fonctions ne peuvent donc pas être utilisées avec des jeux de données discrètes. Utilisez trapz ou cumtrapz lorsqu’une expression fonctionnelle n’est pas disponible pour l’intégration.

Visualiser les données de vitesse

Examinez les données de vitesse suivantes et les données temporelles correspondantes.

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;

Ces données représentent la vitesse (en m/s) d’une voiture relevée à des intervalles de 1 s pendant 24 s.

Tracez les points de données de vitesse et reliez chacun des points par une ligne droite.

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 pente est positive dans les périodes d’accélération, nulle dans les périodes de vitesse constante et négative dans les périodes de décélération. Au temps t = 0, le véhicule est à l’arrêt à vel(1) = 0 m/s. Le véhicule accélère jusqu’à atteindre à t = 8 s une vitesse maximale de vel(9) = 29.05 m/s. Il maintient cette vitesse pendant 4 s. Ensuite, il ralentit à vel(14) = 17.9 m/s pendant 3 s et finit par s’arrêter. Comme cette courbe de vitesse présente plusieurs discontinuités, il est impossible de la décrire avec une seule fonction continue.

Calculer la distance totale parcourue

La fonction trapz effectue une intégration discrète en utilisant les points de données pour créer des trapèzes. Elle convient donc au traitement de jeux de données présentant des discontinuités. Cette méthode suppose un comportement linéaire entre les points de données. Elle peut donc perdre en précision lorsque le comportement entre les points de données n’est pas linéaire. À titre d’illustration, vous pouvez tracer des trapèzes sur le graphe en utilisant les points de données comme sommets.

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 calcule l’aire en dessous d’un jeu de données discrètes en décomposant la région en trapèzes. La fonction additionne ensuite les aires de tous les trapèzes pour calculer l’aire totale.

Calculez la distance totale parcourue par la voiture (correspondant à la zone ombrée) en intégrant numériquement les données de vitesse avec trapz. Par défaut, l’espacement entre les points est supposé égal à 1 si vous utilisez la syntaxe trapz(Y). Toutefois, vous pouvez spécifier un autre espacement X uniforme ou non avec la syntaxe trapz(X,Y). Dans le cas présent, l’espacement entre les relevés du vecteur time est égal à 1. L’espacement par défaut est donc acceptable.

distance = trapz(vel)
distance = 
345.2200

La distance parcourue par la voiture pendant t = 24 s est d’environ 345,22 m.

Tracer la distance parcourue cumulée

La fonction cumtrapz est étroitement liée à trapz. Alors que trapz renvoie uniquement la valeur d’intégration finale, cumtrapz renvoie également les valeurs intermédiaires dans un vecteur.

Calculez la distance parcourue cumulée et tracez le résultat.

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.

Voir aussi

| |

Rubriques