Kursusindhold
Matlab Grundlæggende
Matlab Grundlæggende
Applikation: Beregning af 3D-Baner med While-Løkker
Her lærer du, hvordan du beregner baner for objekter, der bevæger sig i 3D-rum, samt et andet aspekt af programmering: while-løkker, hvis unikke egenskaber gør dem lige så grundlæggende som for-løkker og if-sætninger, selvom de ikke forekommer lige så ofte.
While-løkkens struktur
While-løkker ligner for-løkker, men deres væsentligste forskel ligger i styringen af gentagelser. I stedet for et fast antal gentagelser kører while-løkken, så længe boolesk betingelse er sand. Sådan fungerer det:
Boolesk betingelse evalueres først;
Hvis betingelsen er sand, udføres koden inde i løkken;
Efter koden er kørt, kontrolleres betingelsen igen. Hvis den stadig er sand, udføres koden igen. Dette fortsætter, så længe betingelsen forbliver sand;
Når betingelsen bliver falsk, afsluttes løkken, og programmet fortsætter fra punktet efter løkken.
Denne struktur er særligt nyttig, når man ikke på forhånd ved, hvor mange gange løkken skal køre. Den fortsætter, indtil en bestemt betingelse er opfyldt, hvilket gør den velegnet til opgaver, hvor antallet af gentagelser afhænger af dynamiske faktorer.
Fordi while-løkker gentager, indtil boolesk er falsk, er der en risiko (ved omstændigheder eller fejl) for, at boolesk altid er sand, og while-løkken vil gentage for evigt!
Så hvis du oplever, at dit program tager meget længere tid end normalt, er det en god idé at stoppe det i Matlab ved at trykke:
ctrl
+c
;cmd
+c
.
For at stoppe koden under kørsel og genoverveje logikken og koden.
Ligningen for 1D-bevægelse med konstant acceleration
I videoen bruger vi 1D-bevægelsesligningen:
t: tid (i sekunder);
x(t): objektets position ved tid t;
xi: objektets startposition;
vi: objektets starthastighed;
a: objektets acceleration (antas at være konstant).
Dette anvendes uafhængigt på de ortogonale x, y, z komponenter af position, hastighed og acceleration ved brug af komponentvise matrixoperationer.
Denne ligning er standard i fysik og udledes normalt algebraisk (lidt mere omstændeligt, men ikke svært) eller ved at integrere en konstant acceleration to gange over tid (og erkende, at de resulterende konstanter repræsenterer starthastighed og startposition).
At x, y, z er ortogonale (vinkelrette) gør det muligt at anvende dette på hver af disse dimensioner separat, og samtidig kan vi opfatte dette som analyse af en endimensionel for at forenkle forståelsen.
Opgave
Skriv din egen version af programmet fra videoen ved at forstå målene:
Importér de indledende positioner og hastigheder som separate matricer, samt objektetiketterne som et celle-array;
Fold disse separat ind i to 3D-matricer, så positionerne (x, y, z-koordinater) for hvert objekt kan udvikle sig langs kolonnerne i sit eget 2D-lag. Det samme kan gøres for de indledende hastigheder (selvom de ikke ændrer sig—de er altid de indledende hastigheder) for at gøre indekseringen konsistent senere;
For-løkke over objekterne så vi kan beregne hvert objekts 3D-bane;
Beregn hvert objekts bane inden for en while-løkke, hvis boolske først evaluerer, om objektet stadig er over jorden (dets z-koordinat er ≥ 0). Inden for while-løkken anvendes 1D-bevægelsesligningen til at beregne den nye position (anvend den på x, y, z-koordinaterne uafhængigt ved brug af matrixoperationer). Beregning af positionen på ETHVERT tidspunkt skal KUN afhænge af:
Objektets startposition;
Objektets starthastighed;
Den tid, der evalueres.
Den må ikke afhænge af den forrige position, der blev beregnet.
Verificering af inputdata (indledende positioner + hastigheder) og de variable, der foldede disse ind i 3D-matricer, er altid en god måde at udelukke disse dele af programmet som fejlkilder;
Begræns for-løkken til én iteration, eller fjern tilsvarende objekt 2 og 3 (data og etiketter) fra Excel-filen for at se, hvordan dit program fungerer med ét objekt;
Ikke-parabolske baner kan være tegn på et problem med, hvordan bevægelsesligningen blev anvendt, eller forkert programmering af komponentvise beregninger (husk punktummer før multiplikation osv.);
De indledende positioner (første kolonne i hvert 2D-lag) i din 3D-banematrix skal være de samme som registreret i Excel-filen;
Der bør ikke være nogen negative værdier (hvert objekt startede med en positiv position og hastighed i alle x, y, z-retninger);
Tjek hvordan accelerationen blev defineret, eller prøv at sætte den lig nul. Dette bør give bevægelse med konstant hastighed, hvilket bør danne linjer ved plotning (hvis du tager topvinklen af 3D-grafen, som kun viser bevægelse i x, y-retninger, hvor accelerationen var nul, vil du se det samme);
Ifølge vores koordinatsystem er tyngdeaccelerationen -9.8 m/s² (nedad mod Jorden), ikke +9.8.
Tak for dine kommentarer!