Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Applikasjon: Beregning av 3D-Baner med While-Løkker | Visualiseringer
Matlab-Grunnleggende
course content

Kursinnhold

Matlab-Grunnleggende

Matlab-Grunnleggende

1. Grunnleggende Syntaks og Koding med en Teksteditor
2. Kodegrunnlag
3. Læring Gjennom Applikasjoner
4. Visualiseringer
5. Rekursjon og Matrise-Multiplikasjon

book
Applikasjon: Beregning av 3D-Baner med While-Løkker

Her lærer du hvordan du kan beregne banene til objekter som beveger seg i 3D-rom, samt et annet aspekt ved programmering: while-løkker, hvis unike egenskaper gjør dem like grunnleggende som for-løkker og if-setninger, selv om de ikke brukes like ofte.

Struktur for while-løkke

While-løkker ligner på for-løkker, men hovedforskjellen ligger i kontrollmekanismen for iterasjon. I stedet for et fast antall gjentakelser, kjører while-løkken så lenge boolsk betingelse er sann. Slik fungerer det:

  • Boolsk betingelse evalueres først;

  • Hvis betingelsen er sann, kjøres koden inne i løkken;

  • Etter at koden er kjørt, sjekkes betingelsen på nytt. Hvis den fortsatt er sann, kjøres koden igjen. Dette fortsetter så lenge betingelsen forblir sann;

  • Når betingelsen blir usann, avsluttes løkken, og programmet fortsetter fra punktet etter løkken.

Denne strukturen er spesielt nyttig når du ikke vet på forhånd hvor mange ganger løkken må kjøres. Den fortsetter å kjøre til en bestemt betingelse er oppfylt, noe som gjør den godt egnet for oppgaver der antall gjentakelser avhenger av dynamiske faktorer.

Fordi while-løkker vil gjenta seg til boolsk verdi er usann, er det en risiko (enten ved omstendighet eller feil) for at boolsk verdi alltid er sann og at while-løkken gjentas for alltid!
Så hvis du opplever at programmet ditt tar mye lengre tid enn vanlig, er det lurt å stoppe det i Matlab ved å trykke:

  • ctrl + c;

  • cmd + c.

For å stoppe kode som kjører, og revurdere logikken og koden.

Likningen for 1D-bevegelse med konstant akselerasjon

I videoen bruker vi 1D-bevegelseslikningen:

  • t: tid (i sekunder);

  • x(t): posisjon til objektet ved tid t;

  • xi: startposisjon til objektet;

  • vi: starthastighet til objektet;

  • a: akselerasjon til objektet (antas å være konstant).

Dette anvendes uavhengig på de ortogonale x, y, z-komponentene av posisjon, hastighet og akselerasjon ved bruk av komponentvise matriseoperasjoner.

Denne ligningen er standard i fysikk og utledes vanligvis algebraisk (litt mer omstendelig, men ikke vanskelig) eller ved å integrere en konstant akselerasjon to ganger over tid (og gjenkjenne at de resulterende konstantene representerer starthastighet og startposisjon).

At x, y, z er ortogonale (vinkelrette) gjør at dette kan anvendes på hver av disse dimensjonene separat, og samtidig kan vi betrakte dette som analyse av en endimensjonal for å forenkle forståelsen.

Oppgave

Lag din egen versjon av programmet i videoen ved å forstå målene:

  1. Importer de innledende posisjonene og hastighetene som separate matriser, og objektetikettene som en celle-array;

  2. Trekk disse separat sammen til to 3D-matriser slik at posisjonene (x, y, z-koordinater) til hvert objekt kan utvikle seg langs kolonnene i sitt eget 2D-lag. Vi kan gjøre det samme for de innledende hastighetene (selv om de ikke endres—de er alltid de innledende hastighetene) for å gjøre indekseringen konsistent senere;

  3. For-løkke over objektene slik at vi kan beregne hvert objekts 3D-bane;

  4. Beregn hvert objekts bane innenfor en while-løkke hvor boolsk først evaluerer om objektet fortsatt er over bakken (dets z-koordinat er ≥ 0). Inne i while-løkken, bruk 1D bevegelsesligning for å beregne ny posisjon (bruk den på x, y, z-koordinatene uavhengig ved hjelp av matriseoperasjoner). Beregning av posisjon til ENHVER tid skal KUN avhenge av:

    • Objektets startposisjon;

    • Objektets starthastighet;

    • Den tiden som evalueres.

Den skal ikke avhenge av forrige posisjon som ble beregnet.

  • Å verifisere inputdata (startposisjoner + hastigheter) og variablene som trakk disse sammen til 3D-matriser er alltid en god måte å eliminere disse delene av programmet som feilkilder;

  • Begrens for-løkken til én iterasjon, eller fjern tilsvarende objekt 2 og 3 (data og etiketter) fra Excel-filen for å se hvordan programmet fungerer med ett objekt;

  • Ikke-parabolske baner kan tyde på et problem med hvordan bevegelsesligningen ble brukt, eller feil programmering av komponentvise beregninger (husk punktum før multiplikasjon, osv.);

  • Startposisjonene (første kolonne i hvert 2D-lag) i din 3D-banematrise skal være de samme som registrert i Excel-filen;

  • Det skal ikke være noen negative verdier (hvert objekt startet med positiv posisjon og hastighet i alle x, y, z-retninger);

  • Sjekk hvordan akselerasjon ble definert, eller prøv å sette den lik null. Dette skal gi bevegelse med konstant hastighet, som skal danne linjer når de plottes (hvis du tar toppvisning av 3D-grafen, som bare viser bevegelse i x, y-retningene hvor akselerasjonen var null, vil du se det samme);

  • I henhold til vårt koordinatsystem er tyngdekraften -9.8 m/s² (nedover mot jorden), ikke +9.8.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

course content

Kursinnhold

Matlab-Grunnleggende

Matlab-Grunnleggende

1. Grunnleggende Syntaks og Koding med en Teksteditor
2. Kodegrunnlag
3. Læring Gjennom Applikasjoner
4. Visualiseringer
5. Rekursjon og Matrise-Multiplikasjon

book
Applikasjon: Beregning av 3D-Baner med While-Løkker

Her lærer du hvordan du kan beregne banene til objekter som beveger seg i 3D-rom, samt et annet aspekt ved programmering: while-løkker, hvis unike egenskaper gjør dem like grunnleggende som for-løkker og if-setninger, selv om de ikke brukes like ofte.

Struktur for while-løkke

While-løkker ligner på for-løkker, men hovedforskjellen ligger i kontrollmekanismen for iterasjon. I stedet for et fast antall gjentakelser, kjører while-løkken så lenge boolsk betingelse er sann. Slik fungerer det:

  • Boolsk betingelse evalueres først;

  • Hvis betingelsen er sann, kjøres koden inne i løkken;

  • Etter at koden er kjørt, sjekkes betingelsen på nytt. Hvis den fortsatt er sann, kjøres koden igjen. Dette fortsetter så lenge betingelsen forblir sann;

  • Når betingelsen blir usann, avsluttes løkken, og programmet fortsetter fra punktet etter løkken.

Denne strukturen er spesielt nyttig når du ikke vet på forhånd hvor mange ganger løkken må kjøres. Den fortsetter å kjøre til en bestemt betingelse er oppfylt, noe som gjør den godt egnet for oppgaver der antall gjentakelser avhenger av dynamiske faktorer.

Fordi while-løkker vil gjenta seg til boolsk verdi er usann, er det en risiko (enten ved omstendighet eller feil) for at boolsk verdi alltid er sann og at while-løkken gjentas for alltid!
Så hvis du opplever at programmet ditt tar mye lengre tid enn vanlig, er det lurt å stoppe det i Matlab ved å trykke:

  • ctrl + c;

  • cmd + c.

For å stoppe kode som kjører, og revurdere logikken og koden.

Likningen for 1D-bevegelse med konstant akselerasjon

I videoen bruker vi 1D-bevegelseslikningen:

  • t: tid (i sekunder);

  • x(t): posisjon til objektet ved tid t;

  • xi: startposisjon til objektet;

  • vi: starthastighet til objektet;

  • a: akselerasjon til objektet (antas å være konstant).

Dette anvendes uavhengig på de ortogonale x, y, z-komponentene av posisjon, hastighet og akselerasjon ved bruk av komponentvise matriseoperasjoner.

Denne ligningen er standard i fysikk og utledes vanligvis algebraisk (litt mer omstendelig, men ikke vanskelig) eller ved å integrere en konstant akselerasjon to ganger over tid (og gjenkjenne at de resulterende konstantene representerer starthastighet og startposisjon).

At x, y, z er ortogonale (vinkelrette) gjør at dette kan anvendes på hver av disse dimensjonene separat, og samtidig kan vi betrakte dette som analyse av en endimensjonal for å forenkle forståelsen.

Oppgave

Lag din egen versjon av programmet i videoen ved å forstå målene:

  1. Importer de innledende posisjonene og hastighetene som separate matriser, og objektetikettene som en celle-array;

  2. Trekk disse separat sammen til to 3D-matriser slik at posisjonene (x, y, z-koordinater) til hvert objekt kan utvikle seg langs kolonnene i sitt eget 2D-lag. Vi kan gjøre det samme for de innledende hastighetene (selv om de ikke endres—de er alltid de innledende hastighetene) for å gjøre indekseringen konsistent senere;

  3. For-løkke over objektene slik at vi kan beregne hvert objekts 3D-bane;

  4. Beregn hvert objekts bane innenfor en while-løkke hvor boolsk først evaluerer om objektet fortsatt er over bakken (dets z-koordinat er ≥ 0). Inne i while-løkken, bruk 1D bevegelsesligning for å beregne ny posisjon (bruk den på x, y, z-koordinatene uavhengig ved hjelp av matriseoperasjoner). Beregning av posisjon til ENHVER tid skal KUN avhenge av:

    • Objektets startposisjon;

    • Objektets starthastighet;

    • Den tiden som evalueres.

Den skal ikke avhenge av forrige posisjon som ble beregnet.

  • Å verifisere inputdata (startposisjoner + hastigheter) og variablene som trakk disse sammen til 3D-matriser er alltid en god måte å eliminere disse delene av programmet som feilkilder;

  • Begrens for-løkken til én iterasjon, eller fjern tilsvarende objekt 2 og 3 (data og etiketter) fra Excel-filen for å se hvordan programmet fungerer med ett objekt;

  • Ikke-parabolske baner kan tyde på et problem med hvordan bevegelsesligningen ble brukt, eller feil programmering av komponentvise beregninger (husk punktum før multiplikasjon, osv.);

  • Startposisjonene (første kolonne i hvert 2D-lag) i din 3D-banematrise skal være de samme som registrert i Excel-filen;

  • Det skal ikke være noen negative verdier (hvert objekt startet med positiv posisjon og hastighet i alle x, y, z-retninger);

  • Sjekk hvordan akselerasjon ble definert, eller prøv å sette den lik null. Dette skal gi bevegelse med konstant hastighet, som skal danne linjer når de plottes (hvis du tar toppvisning av 3D-grafen, som bare viser bevegelse i x, y-retningene hvor akselerasjonen var null, vil du se det samme);

  • I henhold til vårt koordinatsystem er tyngdekraften -9.8 m/s² (nedover mot jorden), ikke +9.8.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3
some-alt