Kursinhalt
Matlab-Grundlagen
Matlab-Grundlagen
Anwendung: Berechnung von 3D-Trajektorien mit While-Schleifen
Hier lernen Sie, wie man die Trajektorien von Objekten berechnet, die sich im 3D-Raum bewegen, und auch einen weiteren Aspekt der Programmierung: while-Schleifen, deren einzigartige Eigenschaften sie genauso zu einem Grundbaustein machen wie for-Schleifen und if-Anweisungen, obwohl sie nicht so häufig vorkommen.
Struktur der While-Schleife
While-Schleifen sind ähnlich wie for-Schleifen, aber ihr Hauptunterschied liegt im Kontrollmechanismus für die Iteration. Anstatt einer festen Anzahl von Iterationen läuft die while-Schleife, solange die Boolesche Bedingung wahr ist. So funktioniert es:
- Die Boolesche Bedingung wird zuerst ausgewertet;
- Wenn die Bedingung wahr ist, wird der Code innerhalb der Schleife ausgeführt;
- Nachdem der Code ausgeführt wurde, wird die Bedingung erneut überprüft. Wenn sie immer noch wahr ist, wird der Code erneut ausgeführt. Dies geht so lange weiter, wie die Bedingung wahr bleibt;
- Sobald die Bedingung falsch wird, verlässt die Schleife und das Programm setzt nach der Schleife fort.
Diese Struktur ist besonders nützlich, wenn Sie im Voraus nicht wissen, wie oft die Schleife ausgeführt werden muss. Sie wird so lange ausgeführt, bis eine bestimmte Bedingung erfüllt ist, was sie ideal für Aufgaben macht, bei denen die Anzahl der Iterationen von dynamischen Faktoren abhängt.
Da while-Schleifen wiederholen, bis die Boolesche Bedingung falsch ist, besteht das Risiko (durch Umstände oder Fehler), dass die Boolesche Bedingung immer wahr bleibt und die while-Schleife sich endlos wiederholt!
Wenn Ihr Programm also viel länger als gewöhnlich dauert, ist es eine gute Idee, es in Matlab zu stoppen, indem Sie tippen:
ctrl
+c
;cmd
+c
.
Um den Code im Fortschritt zu stoppen und die Logik und den Code neu zu bewerten.
Die Gleichung für 1D-Bewegung mit konstanter Beschleunigung
Im Video verwenden wir die 1D-Bewegungsgleichung:
- t: Zeit (in Sekunden);
- x(t): Position des Objekts zur Zeit t;
- xi: Anfangsposition des Objekts;
- vi: Anfangsgeschwindigkeit des Objekts;
- a: Beschleunigung des Objekts (angenommen konstant).
Dies wird unabhängig auf die orthogonalen x, y, z Komponenten von Position, Geschwindigkeit und Beschleunigung unter Verwendung von komponentenweisen Matrixoperationen angewendet.
Diese Gleichung ist in der Physik standardmäßig und wird normalerweise algebraisch abgeleitet (etwas mühsamer, aber nicht schlecht) oder durch zweimaliges Integrieren einer konstanten Beschleunigung über die Zeit (und Erkennen, dass die resultierenden Konstanten die Anfangsgeschwindigkeit und Position darstellen).
Dass x, y, z orthogonal (senkrecht) sind, ermöglicht es, dies auf jede dieser Dimensionen separat anzuwenden, und gleichzeitig können wir dies als Analyse einer Eindimension wahrnehmen, um das Verständnis zu vereinfachen.
Aufgabe
Schreiben Sie Ihre eigene Version des Programms im Video, indem Sie die Ziele verstehen:
-
Importieren Sie die anfänglichen Positionen und Geschwindigkeiten als separate Matrizen und die Objektbezeichnungen als Zellarray;
-
Ordnen Sie diese separat in zwei 3D-Matrizen an, sodass sich die Positionen (x, y, z-Koordinaten) jedes Objekts entlang der Spalten seiner eigenen 2D-Schicht entwickeln können. Wir können dasselbe für die anfänglichen Geschwindigkeiten tun (auch wenn sie sich nicht ändern – sie sind immer die anfänglichen Geschwindigkeiten), um das Indexieren später konsistent zu machen;
-
For-Schleife über die Objekte, damit wir die 3D-Trajektorie jedes Objekts berechnen können;
-
Berechnen Sie die Trajektorie jedes Objekts innerhalb einer While-Schleife, deren Boolean zuerst bewertet, ob sich das Objekt noch über dem Boden befindet (seine z-Koordinate ist ≥ 0). Innerhalb der While-Schleife wenden Sie die 1D-Bewegungsgleichung an, um die neue Position zu berechnen (wenden Sie sie unabhängig auf die x, y, z-Koordinaten unter Verwendung von Matrixoperationen an). Die Berechnung der Position zu JEDER Zeit sollte NUR von Folgendem abhängen:
- Der anfänglichen Position des Objekts;
- Der anfänglichen Geschwindigkeit des Objekts;
- Der Zeit, die bewertet wird.
Es sollte nicht von der vorherigen Position abhängen, die berechnet wurde.
-
Die Eingabedaten (anfängliche Positionen + Geschwindigkeiten) und die Variablen, die diese in 3D-Matrizen umgewandelt haben, zu überprüfen, ist immer eine gute Möglichkeit, diese Teile des Programms als Fehlerquellen auszuschließen;
-
Beschränken Sie die for-Schleife auf eine Iteration oder entfernen Sie gleichwertig Objekte 2 und 3 (Daten und Labels) aus der Excel-Datei, um zu sehen, wie Ihr Programm mit einem Objekt funktioniert;
-
Nicht-parabolische Trajektorien könnten ein Symptom für ein Problem mit der Anwendung der Bewegungsgleichung sein oder auf eine falsche Programmierung der komponentenweisen Berechnungen hinweisen (denken Sie an Punkte vor der Multiplikation usw.);
-
Die anfänglichen Positionen (erste Spalte jeder 2D-Schicht) Ihrer 3D-Trajektorienmatrix sollten mit denen in der Excel-Datei übereinstimmen;
-
Es sollten keine negativen Werte vorhanden sein (jedes Objekt begann mit einer positiven Position und Geschwindigkeit in allen x, y, z-Richtungen);
-
Überprüfen Sie, wie die Beschleunigung definiert wurde, oder versuchen Sie, sie auf null zu setzen. Dies sollte eine Bewegung mit konstanter Geschwindigkeit erzeugen, die Linien bilden sollte, wenn sie geplottet wird (wenn Sie die Draufsicht des 3D-Diagramms nehmen, das nur die Bewegung in den x, y-Richtungen zeigt, wo die Beschleunigung null war, werden Sie dasselbe sehen);
-
Laut unserem Koordinatensystem beträgt die Schwerkraft -9,8 m/s² (nach unten zur Erde), nicht +9,8.
Danke für Ihr Feedback!