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, sowie einen weiteren Aspekt der Programmierung: while-Schleifen, deren besondere Eigenschaften sie ebenso zu einem Grundbaustein wie for-Schleifen und if-Anweisungen machen, auch wenn sie nicht so häufig vorkommen.
Struktur der While-Schleife
While-Schleifen ähneln for-Schleifen, aber ihr entscheidender Unterschied liegt im Steuermechanismus für die Iteration. Anstatt einer festen Anzahl von Durchläufen läuft die while-Schleife so lange, wie die boolesche Bedingung wahr ist. So funktioniert es:
Die boolesche Bedingung wird zuerst ausgewertet;
Ist die Bedingung wahr, wird der Code innerhalb der Schleife ausgeführt;
Nach der Ausführung des Codes wird die Bedingung erneut geprüft. Ist sie weiterhin wahr, wird der Code erneut ausgeführt. Dies wiederholt sich, solange die Bedingung wahr bleibt;
Sobald die Bedingung falsch wird, verlässt das Programm die Schleife und fährt nach der Schleife fort.
Diese Struktur ist besonders nützlich, wenn im Voraus nicht bekannt ist, wie oft die Schleife ausgeführt werden muss. Sie läuft so lange, bis eine bestimmte Bedingung erfüllt ist, und eignet sich daher gut für Aufgaben, bei denen die Anzahl der Durchläufe von dynamischen Faktoren abhängt.
Da while-Schleifen so lange wiederholen, bis die boolesche Bedingung falsch ist, besteht das Risiko (durch Umstände oder Fehler), dass die Bedingung immer wahr bleibt und die while-Schleife endlos wiederholt wird!
Wenn Ihr Programm also ungewöhnlich lange läuft, empfiehlt es sich, es in Matlab zu stoppen, indem Sie:
Ctrl
+C
;Cmd
+C
.
verwenden, um den laufenden Code zu stoppen und die Logik sowie den Code neu zu überdenken.
Die Gleichung für eindimensionale Bewegung mit konstanter Beschleunigung
Im Video verwenden wir die 1D-Bewegungsgleichung:
wobei:
die Zeit (in Sekunden) ist;
die Position des Objekts zum Zeitpunkt t ist;
die Anfangsposition des Objekts ist;
die Anfangsgeschwindigkeit des Objekts ist;
die Beschleunigung des Objekts (als konstant angenommen) ist.
Dies wird unabhängig auf die orthogonalen x-, y-, z-Komponenten von Position, Geschwindigkeit und Beschleunigung mittels komponentenweiser Matrixoperationen angewendet.
Diese Gleichung ist in der Physik Standard und wird üblicherweise algebraisch (etwas mühsamer, aber machbar) oder durch zweimaliges Integrieren einer konstanten Beschleunigung über die Zeit hergeleitet (wobei die entstehenden Konstanten die Anfangsgeschwindigkeit und Anfangsposition darstellen).
Dass x, y, z orthogonal (rechtwinklig) sind, erlaubt es, dies auf jede dieser Dimensionen separat anzuwenden, und gleichzeitig kann man dies als Analyse einer Einzeldimension betrachten, um das Verständnis zu vereinfachen.
Aufgabe
Erstellen einer eigenen Version des Programms aus dem Video unter Berücksichtigung der Ziele:
Importieren der Anfangs-Positionen und Geschwindigkeiten als separate Matrizen sowie der Objektbezeichnungen als Zell-Array;
Separates Zusammenfassen dieser Daten in zwei 3D-Matrizen, sodass sich die Positionen (x-, y-, z-Koordinaten) jedes Objekts entlang der Spalten seiner eigenen 2D-Schicht entwickeln können. Dasselbe kann für die Anfangs-Geschwindigkeiten durchgeführt werden (auch wenn sie sich nicht ändern – es sind immer die Anfangs-Geschwindigkeiten), um später eine konsistente Indizierung zu gewährleisten;
For-Schleife über die Objekte, um die 3D-Trajektorie jedes Objekts zu berechnen;
Berechnung der Trajektorie jedes Objekts innerhalb einer while-Schleife, deren Boolescher Ausdruck zunächst prüft, ob sich das Objekt noch über dem Boden befindet (seine z-Koordinate ist ). Innerhalb der while-Schleife Anwendung der 1D-Bewegungsgleichung zur Berechnung der neuen Position (unabhängige Anwendung auf die x-, y-, z-Koordinaten mittels Matrixoperationen). Die Berechnung der Position zu jedem Zeitpunkt sollte AUSSCHLIESSLICH von Folgendem abhängen:
Der Anfangs-Position des Objekts;
Der Anfangs-Geschwindigkeit des Objekts;
Der betrachteten Zeit.
Sie sollte nicht von der zuvor berechneten Position abhängen.
Überprüfung der Eingabedaten (Anfangs-Positionen + Geschwindigkeiten) und der Variablen, die diese in 3D-Matrizen zusammengefasst haben, ist stets eine gute Methode, um diese Programmteile als Fehlerquellen auszuschließen;
Beschränkung der for-Schleife auf eine Iteration oder alternativ Entfernen von Objekt 2 und 3 (Daten und Bezeichnungen) aus der Excel-Datei, um zu sehen, wie das Programm mit nur einem Objekt funktioniert;
Nicht-parabolische Trajektorien können auf eine fehlerhafte Anwendung der Bewegungsgleichung oder eine inkorrekte Programmierung der komponentenweisen Berechnungen (beispielsweise Punkte vor Multiplikation etc.) hindeuten;
Die Anfangs-Positionen (erste Spalte jeder 2D-Schicht) der 3D-Trajektorienmatrix sollten mit den in der Excel-Datei aufgezeichneten Werten übereinstimmen;
Es sollten keine negativen Werte auftreten (jedes Objekt startete mit einer positiven Position und Geschwindigkeit in allen x-, y-, z-Richtungen);
Überprüfen, wie die Beschleunigung definiert wurde, oder sie testweise auf null setzen. Dies sollte eine Bewegung mit konstanter Geschwindigkeit ergeben, die beim Plotten Geraden bildet (bei der Draufsicht auf das 3D-Diagramm, das nur die Bewegung in x-, y-Richtung zeigt, wo die Beschleunigungnull war, ist dies sichtbar);
Nach unserem Koordinatensystem beträgt die Erdbeschleunigung (nach unten zur Erde), nicht .
Danke für Ihr Feedback!