Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Toepassing: Berekenen van 3D-Trajecten met While-Lussen | Visualisaties
Matlab Basis
course content

Cursusinhoud

Matlab Basis

Matlab Basis

1. Basis Syntax en Coderen met een Teksteditor
2. Codeerfundamenten
3. Leren Door Middel van Toepassingen
4. Visualisaties
5. Recursie en Matrixvermenigvuldiging

book
Toepassing: Berekenen van 3D-Trajecten met While-Lussen

Hier leer je hoe je de trajecten van objecten die zich in de 3D-ruimte bewegen kunt berekenen, evenals een ander aspect van programmeren: while-lussen, waarvan de unieke eigenschappen ze net zo basis maken als for-lussen en if-statements, hoewel ze minder vaak voorkomen.

Structuur van de While-lus

While-lussen lijken op for-lussen, maar het belangrijkste verschil zit in het mechanisme voor het regelen van de iteratie. In plaats van een vast aantal iteraties, draait de while-lus zolang de Booleaanse conditie waar is. Dit is hoe het werkt:

  • De Booleaanse conditie wordt eerst geëvalueerd;

  • Als de conditie waar is, wordt de code binnen de lus uitgevoerd;

  • Nadat de code is uitgevoerd, wordt de conditie opnieuw gecontroleerd. Als deze nog steeds waar is, wordt de code opnieuw uitgevoerd. Dit gaat door zolang de conditie waar blijft;

  • Zodra de conditie onwaar wordt, stopt de lus en gaat het programma verder vanaf het punt na de lus.

Deze structuur is vooral handig wanneer je van tevoren niet weet hoe vaak de lus moet draaien. De lus blijft uitvoeren totdat aan een bepaalde voorwaarde is voldaan, wat het ideaal maakt voor taken waarbij het aantal iteraties afhankelijk is van dynamische factoren.

Omdat while-lussen blijven herhalen totdat de Booleaan onwaar is, bestaat het risico (door omstandigheden of fouten) dat de Booleaan altijd waar blijft en de while-lus oneindig doorgaat!
Dus als je merkt dat je programma veel langer duurt dan normaal, is het verstandig om het in Matlab te stoppen door te drukken op:

  • Ctrl + C;

  • Cmd + C.

Gebruik deze toetsen om lopende code te stoppen en de logica en code opnieuw te evalueren.

De Vergelijking voor 1D-Beweging met Constante Versnelling

In de video gebruiken we de 1D-bewegingsvergelijking:

x(t)=12at2+vit+xix(t) = \frac12 at^2 + v_it + x_i

waarbij:

  • tt de tijd is (in seconden);

  • x(t)x(t) de positie van het object op tijdstip t is;

  • xix_i de beginpositie van het object is;

  • viv_i de beginsnelheid van het object is;

  • aa de versnelling van het object is (aangenomen constant).

Deze wordt onafhankelijk toegepast op de orthogonale x-, y-, z-componenten van positie, snelheid en versnelling met behulp van componentgewijze matrixbewerkingen.

Deze vergelijking is standaard in de natuurkunde en wordt meestal algebraïsch afgeleid (iets omslachtiger, maar niet moeilijk) of door een constante versnelling tweemaal te integreren over de tijd (waarbij de resulterende constanten de beginsnelheid en beginpositie voorstellen).

Dat x, y, z orthogonaal (loodrecht) zijn, maakt het mogelijk deze op elk van deze dimensies afzonderlijk toe te passen, en tegelijkertijd kunnen we dit zien als het analyseren van een eendimensionaal probleem om het begrip te vereenvoudigen.

Taak

Schrijf een eigen versie van het programma uit de video door de doelstellingen te begrijpen:

  1. Importeer de initiële posities en snelheden als afzonderlijke matrices, en de objectlabels als een cell array;

  2. Vouw deze afzonderlijk uit tot twee 3D-matrices zodat de posities (x-, y-, z-coördinaten) van elk object kunnen evolueren langs de kolommen van hun eigen 2D-laag. Doe hetzelfde voor de initiële snelheden (ook al veranderen deze niet—het blijven altijd de initiële snelheden) om indexering consistent te houden voor later;

  3. For-loop over de objecten zodat voor elk object de 3D-trajectorie kan worden berekend;

  4. Bereken de trajectorie van elk object binnen een while-loop waarvan de Booleaanse waarde eerst evalueert of het object zich nog boven de grond bevindt (de z-coördinaat is 0\ge 0). Binnen de while-loop pas je de 1D-bewegingsvergelijking toe om de nieuwe positie te berekenen (pas deze onafhankelijk toe op de x-, y-, z-coördinaten met behulp van matrixbewerkingen). Het berekenen van de positie op ELK moment mag ALLEEN afhangen van:

    • De initiële positie van het object;

    • De initiële snelheid van het object;

    • De geëvalueerde tijd.

Het mag niet afhangen van de vorige positie die is berekend.

  • Het verifiëren van de invoergegevens (initiële posities + snelheden) en de variabelen die deze hebben uitgevouwen tot 3D-matrices is altijd een goede manier om deze delen van het programma als bron van fouten uit te sluiten;

  • Beperk de for-loop tot één iteratie, of verwijder objecten 2 en 3 (gegevens en labels) uit het Excel-bestand om te zien hoe het programma presteert met één object;

  • Niet-parabolische trajectorieën kunnen wijzen op een probleem met de toepassing van de bewegingsvergelijking, of op foutieve programmering van componentgewijze berekeningen (denk aan punten voor vermenigvuldiging, enz.);

  • De initiële posities (eerste kolom van elke 2D-laag) van je 3D-trajectoriematrix moeten overeenkomen met die in het Excel-bestand;

  • Er mogen geen negatieve waarden zijn (elk object begon met een positieve positie en snelheid in alle x-, y-, z-richtingen);

  • Controleer hoe de versnelling is gedefinieerd, of probeer deze gelijk te stellen aan nul. Dit zou een beweging met constante snelheid moeten opleveren, wat lijnen vormt bij het plotten (als je het bovenaanzicht van de 3D-grafiek neemt, dat alleen de beweging in de x-, y-richtingen toont waar de versnellingnul was, zie je hetzelfde);

  • Volgens ons coördinatensysteem is de zwaartekracht 9.8m/s2-9.8 m/s^2 (naar beneden, richting de Aarde), niet +9.8+9.8.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

course content

Cursusinhoud

Matlab Basis

Matlab Basis

1. Basis Syntax en Coderen met een Teksteditor
2. Codeerfundamenten
3. Leren Door Middel van Toepassingen
4. Visualisaties
5. Recursie en Matrixvermenigvuldiging

book
Toepassing: Berekenen van 3D-Trajecten met While-Lussen

Hier leer je hoe je de trajecten van objecten die zich in de 3D-ruimte bewegen kunt berekenen, evenals een ander aspect van programmeren: while-lussen, waarvan de unieke eigenschappen ze net zo basis maken als for-lussen en if-statements, hoewel ze minder vaak voorkomen.

Structuur van de While-lus

While-lussen lijken op for-lussen, maar het belangrijkste verschil zit in het mechanisme voor het regelen van de iteratie. In plaats van een vast aantal iteraties, draait de while-lus zolang de Booleaanse conditie waar is. Dit is hoe het werkt:

  • De Booleaanse conditie wordt eerst geëvalueerd;

  • Als de conditie waar is, wordt de code binnen de lus uitgevoerd;

  • Nadat de code is uitgevoerd, wordt de conditie opnieuw gecontroleerd. Als deze nog steeds waar is, wordt de code opnieuw uitgevoerd. Dit gaat door zolang de conditie waar blijft;

  • Zodra de conditie onwaar wordt, stopt de lus en gaat het programma verder vanaf het punt na de lus.

Deze structuur is vooral handig wanneer je van tevoren niet weet hoe vaak de lus moet draaien. De lus blijft uitvoeren totdat aan een bepaalde voorwaarde is voldaan, wat het ideaal maakt voor taken waarbij het aantal iteraties afhankelijk is van dynamische factoren.

Omdat while-lussen blijven herhalen totdat de Booleaan onwaar is, bestaat het risico (door omstandigheden of fouten) dat de Booleaan altijd waar blijft en de while-lus oneindig doorgaat!
Dus als je merkt dat je programma veel langer duurt dan normaal, is het verstandig om het in Matlab te stoppen door te drukken op:

  • Ctrl + C;

  • Cmd + C.

Gebruik deze toetsen om lopende code te stoppen en de logica en code opnieuw te evalueren.

De Vergelijking voor 1D-Beweging met Constante Versnelling

In de video gebruiken we de 1D-bewegingsvergelijking:

x(t)=12at2+vit+xix(t) = \frac12 at^2 + v_it + x_i

waarbij:

  • tt de tijd is (in seconden);

  • x(t)x(t) de positie van het object op tijdstip t is;

  • xix_i de beginpositie van het object is;

  • viv_i de beginsnelheid van het object is;

  • aa de versnelling van het object is (aangenomen constant).

Deze wordt onafhankelijk toegepast op de orthogonale x-, y-, z-componenten van positie, snelheid en versnelling met behulp van componentgewijze matrixbewerkingen.

Deze vergelijking is standaard in de natuurkunde en wordt meestal algebraïsch afgeleid (iets omslachtiger, maar niet moeilijk) of door een constante versnelling tweemaal te integreren over de tijd (waarbij de resulterende constanten de beginsnelheid en beginpositie voorstellen).

Dat x, y, z orthogonaal (loodrecht) zijn, maakt het mogelijk deze op elk van deze dimensies afzonderlijk toe te passen, en tegelijkertijd kunnen we dit zien als het analyseren van een eendimensionaal probleem om het begrip te vereenvoudigen.

Taak

Schrijf een eigen versie van het programma uit de video door de doelstellingen te begrijpen:

  1. Importeer de initiële posities en snelheden als afzonderlijke matrices, en de objectlabels als een cell array;

  2. Vouw deze afzonderlijk uit tot twee 3D-matrices zodat de posities (x-, y-, z-coördinaten) van elk object kunnen evolueren langs de kolommen van hun eigen 2D-laag. Doe hetzelfde voor de initiële snelheden (ook al veranderen deze niet—het blijven altijd de initiële snelheden) om indexering consistent te houden voor later;

  3. For-loop over de objecten zodat voor elk object de 3D-trajectorie kan worden berekend;

  4. Bereken de trajectorie van elk object binnen een while-loop waarvan de Booleaanse waarde eerst evalueert of het object zich nog boven de grond bevindt (de z-coördinaat is 0\ge 0). Binnen de while-loop pas je de 1D-bewegingsvergelijking toe om de nieuwe positie te berekenen (pas deze onafhankelijk toe op de x-, y-, z-coördinaten met behulp van matrixbewerkingen). Het berekenen van de positie op ELK moment mag ALLEEN afhangen van:

    • De initiële positie van het object;

    • De initiële snelheid van het object;

    • De geëvalueerde tijd.

Het mag niet afhangen van de vorige positie die is berekend.

  • Het verifiëren van de invoergegevens (initiële posities + snelheden) en de variabelen die deze hebben uitgevouwen tot 3D-matrices is altijd een goede manier om deze delen van het programma als bron van fouten uit te sluiten;

  • Beperk de for-loop tot één iteratie, of verwijder objecten 2 en 3 (gegevens en labels) uit het Excel-bestand om te zien hoe het programma presteert met één object;

  • Niet-parabolische trajectorieën kunnen wijzen op een probleem met de toepassing van de bewegingsvergelijking, of op foutieve programmering van componentgewijze berekeningen (denk aan punten voor vermenigvuldiging, enz.);

  • De initiële posities (eerste kolom van elke 2D-laag) van je 3D-trajectoriematrix moeten overeenkomen met die in het Excel-bestand;

  • Er mogen geen negatieve waarden zijn (elk object begon met een positieve positie en snelheid in alle x-, y-, z-richtingen);

  • Controleer hoe de versnelling is gedefinieerd, of probeer deze gelijk te stellen aan nul. Dit zou een beweging met constante snelheid moeten opleveren, wat lijnen vormt bij het plotten (als je het bovenaanzicht van de 3D-grafiek neemt, dat alleen de beweging in de x-, y-richtingen toont waar de versnellingnul was, zie je hetzelfde);

  • Volgens ons coördinatensysteem is de zwaartekracht 9.8m/s2-9.8 m/s^2 (naar beneden, richting de Aarde), niet +9.8+9.8.

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3
some-alt