Hauptinhalt

Integration numerischer Daten

Dieses Beispiel zeigt, wie Sie eine Reihe diskreter Geschwindigkeitsdaten numerisch integrieren können, um die zurückgelegte Strecke zu schätzen. Da die integral-Familie nur Function Handles als Eingaben akzeptiert, können diese Funktionen nicht mit diskreten Datensätzen verwendet werden. Verwenden Sie trapz oder cumtrapz, wenn kein funktionaler Ausdruck für die Integration verfügbar ist.

Anzeigen der Geschwindigkeitsdaten

Betrachten Sie die folgenden Geschwindigkeitsdaten und die entsprechenden Zeitdaten.

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;

Diese Daten stellen die Geschwindigkeit eines Autos (in m/s) dar, die in Abständen von 1 s über 24 s gemessen wurde.

Plotten Sie die Geschwindigkeitsdatenpunkte und verbinden Sie alle Punkte mit einer geraden Linie.

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.

Die Steigung ist in Zeiten der Beschleunigung positiv, in Zeiten konstanter Geschwindigkeit Null und in Zeiten der Verlangsamung negativ. Zum Zeitpunkt t = 0 befindet sich das Fahrzeug im Ruhezustand: vel(1) = 0 m/s. Das Fahrzeug beschleunigt, bis es bei t = 8 s seine Höchstgeschwindigkeit von vel(9) = 29.05 m/s erreicht und diese Geschwindigkeit 4 s lang beibehält. Dann verlangsamt es sich über einen Zeitraum von 3 s auf vel(14) = 17.9 m/s und kehrt schließlich in den Ruhezustand zurück. Da die Geschwindigkeitskurve mehrere Diskontinuitäten aufweist, kann eine einzelne kontinuierliche Funktion sie nicht beschreiben.

Berechnen der zurückgelegten Gesamtstrecke

trapz führt eine diskrete Integration durch, indem es die Datenpunkte zur Erstellung von Trapezen verwendet, und ist somit gut für den Umgang mit Datensätzen mit Diskontinuitäten eignet. Bei dieser Methode wird von einem linearen Verhalten zwischen den Datenpunkten ausgegangen, und die Genauigkeit ist möglicherweise geringer, wenn das Verhalten zwischen den Datenpunkten nicht linear ist. Zur Veranschaulichung können Sie Trapeze in das Diagramm zeichnen und dabei die Datenpunkte als Scheitelpunkte verwenden.

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 berechnet die Fläche unter einer Reihe von diskreten Daten, indem es die Region in Trapeze aufteilt. Die Funktion addiert dann die Flächen der einzelnen Trapeze, um die Gesamtfläche zu berechnen.

Berechnen Sie die Gesamtstrecke, die das Auto zurückgelegt hat (und die der schattierten Fläche entspricht), indem Sie die Geschwindigkeitsdaten mit trapz numerisch integrieren. Standardmäßig wird angenommen, dass der Abstand zwischen den Punkten 1 beträgt, wenn Sie die Syntax trapz(Y) verwenden. Mit der Syntax trapz(X,Y) können Sie jedoch einen anderen gleichmäßigen oder ungleichmäßigen Abstand X festlegen. In diesem Fall beträgt der Abstand zwischen den Messwerten im time-Vektor 1. Daher ist es akzeptabel, den Standardabstand zu verwenden.

distance = trapz(vel)
distance = 
345.2200

Die vom Auto in t = 24 s zurückgelegte Strecke beträgt etwa 345,22 m.

Plotten der kumulierten zurückgelegten Strecke

Die cumtrapz-Funktion ist eng verwandt mit trapz. Während trapz nur den endgültigen Integrationswert zurückgibt, gibt cumtrapz auch Zwischenwerte in einem Vektor zurück.

Berechnen Sie die kumulierte zurückgelegte Strecke und plotten Sie das Ergebnis.

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.

Siehe auch

| |

Themen