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