8.2 Drag og 2D-baner numerisk
Luftmotstand med `abs(v)*v`, og komponentvis integrasjon i `x` og `y` for kast med drag, komet og satellitt.
De to innpakningene som går igjen, er et kast med luftmotstand og et legeme i bane rundt et tyngdepunkt — en komet eller en satellitt. Begge er todimensjonale, og begge krever fire tabeller i stedet for to.
Sensor er usedvanlig detaljert her, ut fra sensorveiledningene i H2023, V2024 og V2025 (tre av løsningsforslagene i arkivet har en innebygd sensorveiledning med poenggiving per deloppgave):
| Feil | Trekk |
|---|---|
Drag skrevet v[i]**2 i stedet for abs(v[i])*v[i] | −1 poeng |
v uten indeks i løkka | −2 poeng |
| Bare én romlig komponent i en todimensjonal kode | maks 2 av 5 poeng |
| Feil akselerasjonskomponent | inntil −3 poeng |
Den tredje er den dyreste: en kode som bare regner på -retningen i et kast, kan ikke gi mer enn to poeng uansett hvor pen den ellers er.
Høyeste prioritet — dette må sitte.
Øktforslag: kapitlet er på 70 minutter. Løkke 1–2 (drag i én dimensjon og de fire tabellene) er en naturlig første økt, løkke 3–4 (kastet og de andre 2D-kreftene) den neste.
Forkunnskaper — sist du var her
Dette kapitlet bygger på kap. 8.1, kap. 7.3 og kap. 2.2. Det du trenger derfra, ferdig oppfrisket:
Euler–Cromer-løkka fra forrige kapittel, som er malen alt her bygger på:
Farten oppdateres først, og den oppdaterte farten brukes i posisjonslinja.
De to dragmodellene fra kap. 7.3:
Koeffisientene har ulike enheter — i og i — og kan aldri byttes om. Absoluttverdien i den kvadratiske modellen er ikke pynt: den sørger for at kraften snur når farten snur.
Terminalfarten for kvadratisk drag, som er referansefarten i alle fallproblemer:
Kastet uten luftmotstand fra kap. 2.2: de to retningene er da helt uavhengige, er konstant, og rekkevidden er med maksimum ved . Alt dette slutter å gjelde når drag kommer inn — og hvorfor det slutter å gjelde, er halve poenget i dette kapitlet. Se også Bevegelse i to dimensjoner og Kastering - horisontal og skrå.
Notasjonsavtale for kapitlet. Posisjonen har komponentene og , farten og , og tallverdien av farten skrives uten fet markering, siden det er en skalar. Vi regner positivt oppover i alle kast, slik at tyngdeleddet blir . Vi bruker .
Løkke 1 — drag i koden, én dimensjon (~14 min)
Kast en tennisball rett opp. Den bruker lengre tid ned enn opp, og den kommer ned med lavere fart enn den ble kastet opp med. Årsaken er at luftmotstanden alltid peker mot bevegelsen: den bremser på vei opp, og den bremser på vei ned.
Denne ene setningen er alt som skal til for å forstå hvorfor drag-leddet skrives som det gjør i koden.
Bidraget fra luftmotstanden til akselerasjonslinja, for den kvadratiske modellen:
a = ... - (D/m)*abs(v[i])*v[i]Uttrykket kommer rett fra kraftmodellen delt på massen. Dragkoeffisienten er ikke masseuavhengig, så den må deles på — i motsetning til tyngdeleddet, der massen forkortes.
For den lineære modellen blir leddet - (kv/m)*v[i]. Der trengs ingen absoluttverdi: farten står allerede i første potens, og fortegnet følger av seg selv.
Fordi er positiv uansett fortegn på farten, mens luftmotstanden må skifte fortegn samtidig med bevegelsen.
Sett inn en negativ fart, altså et legeme på vei nedover med positivt oppover:
| Skrivemåte | ||
|---|---|---|
| (bremser) | (bremser) | |
| (bremser) | (driver) |
Med kvadratet ville lufta dyttet ballen fortere nedover på vei ned. Absoluttverdien gir størrelsen, den siste faktoren gir retningen, og produktet har derfor riktig størrelse og riktig fortegn i ett og samme uttrykk.
Dette er felle #4 i bokas feilregister, og den koster typisk 1 poeng i koden — pluss ett til i utledningen, hvis samme feil står begge steder.
Et legeme med masse slippes fra ro og faller gjennom lufta med kvadratisk luftmotstand, .
a) Skriv en Euler–Cromer-kode som finner farten og fallstrekningen i 20 sekunder.
b) Kjør koden, og kontroller resultatet mot den analytiske løsningen fra kap. 7.3.
a) Bevegelseslikningen er
import numpy as np
g = 9.81
m = 0.0800 # kg
D = 0.00250 # kg/m
N = 20001
dt = 0.0010
t = np.zeros(N)
y = np.zeros(N)
v = np.zeros(N)
y[0] = 0.0
v[0] = 0.0
for i in range(N - 1):
a = g - (D / m) * abs(v[i]) * v[i]
v[i + 1] = v[i] + a * dt
y[i + 1] = y[i] + v[i + 1] * dt
t[i + 1] = t[i] + dt
vT = np.sqrt(m * g / D)
print("terminalfart ", round(vT, 4))
print("v etter 2,0 s ", round(v[2000], 4))
print("tanh-losning 2,0 s", round(vT * np.tanh(g * 2.0 / vT), 4))
print("v etter 20 s ", round(v[-1], 4))
print("falt etter 20 s ", round(y[-1], 2))Utskrift:
terminalfart 17.7178
v etter 2,0 s 14.2315
tanh-losning 2,0 s 14.2296
v etter 20 s 17.7178
falt etter 20 s 332.19b) Tre kontroller, alle uavhengige av koden:
Terminalfarten. nedover. Koden gir etter 20 sekunder — den har flatet helt ut ✓.
Forløpet. Den analytiske løsningen for ensrettet fart er . Ved gir den ; koden gir . Avviket er , altså ✓.
Størrelsesorden. Etter 20 sekunder har legemet falt . Hadde det gått med terminalfart hele veien, ville det falt ; forskjellen på er «etterslepet» fra oppstartsfasen, der farten ennå var lavere. Rimelig ✓.
Legg merke til hvorfor kontrollen er verdt noe. Både abs(v[i])*v[i] og v[i]**2 gir nøyaktig samme tall i dette caset, siden farten aldri er negativ. Kontrollen tester altså strukturen i koden — arrays, indekser, rekkefølge, fortegn på tyngden — men den ville ikke avslørt en manglende absoluttverdi. Det gjør bare et case der legemet snur.
Sensorblikk: at forenklingen er gyldig her, er noe du skal skrive ut, ikke noe du skal la sensor gjette. En besvarelse som bruker kvadratet uten et ord om hvorfor, ser ut som felle #4 selv om regningen er riktig.
Forklar med egne ord, i to–tre setninger hver:
a) hvorfor kvadratisk luftmotstand skrives abs(v[i])*v[i] og ikke v[i]**2 i koden,
b) hvorfor tyngdeleddet i akselerasjonslinja blir uten masse, mens dragleddet må deles på massen,
c) hvorfor koden i eksempel 1 ville gitt nøyaktig samme svar med v[i]**2.
Løkke 2 — fire tabeller i stedet for to (~16 min)
Uten luftmotstand er et kast to uavhengige bevegelser: konstant fart vannrett, konstant akselerasjon loddrett. Du kan regne på dem hver for seg og skjøte dem sammen til slutt. Det er hele grunnlaget for kastformlene i kap. 2.2.
Med luftmotstand er de ikke lenger uavhengige. Motstanden avhenger av farten, og farten er satt sammen av begge komponentene:
En ball som stiger raskt, får derfor også kraftigere bremsing vannrett. De to retningene snakker sammen, og det er nettopp den koblingen som gjør at ingen lukket løsning finnes.
Intuisjon: uten drag er de to retningene to separate problemer. Med drag er de ett problem med to tall — og det er akkurat like enkelt for en maskin, men umulig for en formel.
Å føre Euler–Cromer-løkka én gang for hver romlig retning, med egne tabeller for hver komponent:
x, y, vx, vyAlle fire oppdateres i samme gjennomløp av løkka, med samme og samme indeks . Rekkefølgen internt er den samme som i én dimensjon: begge fartskomponentene først, deretter begge posisjonskomponentene med de oppdaterte fartene.
Dette er poengfellen sensor er hardest på. En kode som bare tar med én romlig komponent i et todimensjonalt problem, gir maks 2 av 5 poeng, uansett hvor korrekt den ellers er.
Denne størrelsen er en skalar — den har ingen retning og skrives derfor uten fet markering. Den lagres ikke i noen tabell, siden den regnes på nytt hver gang og ikke trengs etterpå.
Det er nettopp her de to retningene kobles: inneholder begge komponentene, og inngår i begge akselerasjonslinjene.
der er tallverdien av farten.
Merk hvor absoluttverdien er blitt av. I én dimensjon skrev vi . I to dimensjoner er per definisjon positiv (det er en lengde), og retningen kommer fra fortegnet på komponenten eller . Produktet gjør altså nøyaktig samme jobb som gjorde i én dimensjon — automatisk riktig fortegn i begge retninger, hele veien.
I kode:
ax = -(D/m)*v*vx[i]
ay = -g - (D/m)*v*vy[i]En ball har i et gitt tidspunkt fartskomponentene og . Massen er , dragkoeffisienten , og er positiv oppover.
a) Finn tallverdien av farten.
b) Finn begge dragkomponentene, med fortegn.
c) Finn begge akselerasjonskomponentene.
d) Peker dragkraften motsatt vei av hastigheten? Kontroller ved å sammenlikne forholdstallene.
Løkke 3 — kastet med luftmotstand (~20 min)
Nå setter vi alt sammen. Dette er den innpakningen som oftest står i eksamenssettene, og den er verdt å kunne skrive uten å tenke.
vx[0] = v0*np.cos(theta)
vy[0] = v0*np.sin(theta)Vinkelen må være i radianer. np.cos og np.sin regner ikke i grader, og np.radians(38.0) er den trygge omskrivingen. En vinkel oppgitt i grader og satt rett inn er en av de feilene som gir helt plausible, men helt gale tall.
Kontrollen er billig: skal gi tilbake.
Testen som avslutter løkka når legemet treffer bakken:
if y[i+1] < 0:
breakLøkka oppdager først at er blitt negativ, altså i steget etter nedslaget. Med og en vannrett fart på er overskytingen under to centimeter — normalt godt innenfor det du oppgir med tre gjeldende siffer.
Trenger du nedslagspunktet mer nøyaktig, interpolerer du lineært mellom de to siste punktene: brøkdelen av det siste steget, og nedslaget ved .
En ball med masse kastes fra bakkenivå med startfarten i vinkelen over vannrett. Luftmotstanden er kvadratisk med .
a) Sett opp bevegelseslikningene på komponentform.
b) Skisser en kode som finner banen, og begrunn metodevalget.
c) Kjør koden, og oppgi rekkevidde, flytid, høyeste punkt og nedslagsfart.
d) Sammenlikn med kastet uten luftmotstand, og forklar forskjellene fysisk.
a) To krefter virker på ballen: tyngden i -retningen, og luftmotstanden langs . Newtons 2. lov komponentvis, med positiv oppover:
På eksplisitt form:
b)
import numpy as np
g = 9.81
m = 0.145 # kg
D = 0.00110 # kg/m
N = 5000
dt = 0.0010
x = np.zeros(N)
y = np.zeros(N)
vx = np.zeros(N)
vy = np.zeros(N)
v0 = 32.0
theta = np.radians(38.0)
vx[0] = v0 * np.cos(theta)
vy[0] = v0 * np.sin(theta)
n = N - 1
for i in range(N - 1):
v = np.sqrt(vx[i]**2 + vy[i]**2)
ax = -(D / m) * v * vx[i]
ay = -g - (D / m) * v * vy[i]
vx[i + 1] = vx[i] + ax * dt
vy[i + 1] = vy[i] + ay * dt
x[i + 1] = x[i] + vx[i + 1] * dt
y[i + 1] = y[i] + vy[i + 1] * dt
if y[i + 1] < 0:
n = i + 1
break
print("antall steg brukt", n)
print("nedslag ved x = ", round(x[n], 2))
print("flytid ", round(n * dt, 3))
print("hoyeste punkt ", round(np.max(y[:n + 1]), 2))
print("sluttfart ", round(np.sqrt(vx[n]**2 + vy[n]**2), 2))Utskrift:
antall steg brukt 3554
nedslag ved x = 66.72
flytid 3.554
hoyeste punkt 15.58
sluttfart 21.37Begrunnelse for metodevalget: «Jeg bruker Euler–Cromer, der begge fartskomponentene oppdateres først og de oppdaterte fartene brukes i posisjonslinjene. Metoden er tilnærmet energibevarende, slik at feilen ikke akkumulerer over banen, mens Forward Euler bruker de gamle fartene og tilfører energi systematisk. Dragleddet er skrevet med farten som felles faktor, slik at kraften automatisk peker mot bevegelsen i alle deler av banen, også etter toppunktet.»
c) Rekkevidde , flytid , høyeste punkt , nedslagsfart .
d) Uten luftmotstand gir kastformlene fra kap. 2.2:
| Størrelse | Uten drag | Med drag | Endring |
|---|---|---|---|
| Rekkevidde | |||
| Flytid | |||
| Høyeste punkt | |||
| Nedslagsfart |
Fysisk forklaring på hver av dem:
Rekkevidden faller mest. Den vannrette farten er ikke lenger konstant — motstanden spiser av hele veien, og ballen kommer stadig kortere per sekund.
Nedslagsfarten er lavere enn startfarten. Uten motstand ville de vært like, siden ballen kommer tilbake til samme høyde og mekanisk energi er bevart. Luftmotstanden gjør negativt arbeid i begge faser, både opp og ned, så energien ved nedslag er mindre enn ved utkast.
Banen er usymmetrisk. Toppunktet ligger ikke lenger midt mellom utkast og nedslag: ballen bruker opp og ned, og nedturen er brattere. Årsaken er at farten — og dermed bremsingen — er størst i første del av banen.
Kontroll av koden: setter vi i den samme koden, gir den rekkevidde mot formelens . At koden gjenskaper den analytiske fasiten på fire gjeldende siffer, er beviset på at strukturen er riktig — og det er en kontroll som tar tjue sekunder.
— naturlig pausepunkt —
y og vy: den beskriver et loddrett kast, ikke et skrått. Fire tabeller, fire oppdateringslinjer.Felle #4 — v[i]**2 i stedet for abs(v[i])*v[i] i én dimensjon. −1 poeng. I to dimensjoner er den tilsvarende feilen å skrive -(D/m)*vx[i]**2 i stedet for -(D/m)*v*vx[i]: da forsvinner både koblingen mellom komponentene og fortegnsbyttet.
Felle #5 — v uten indeks i løkka. −2 poeng. Merk at i 2D er v uten indeks derimot riktig for fartens tallverdi, som regnes på nytt hvert steg og ikke lagres. Det er vx og vy som alltid skal ha indeks.
Å regne akselerasjonene i feil rekkefølge. Farten må stå ferdig utregnet før begge akselerasjonskomponentene. Oppdaterer du vx[i+1] før du regner ay, blander du to tidspunkt i samme uttrykk.
Vinkel i grader satt rett inn i np.cos. Gir helt plausible tall som er helt gale. Bruk np.radians(38.0), og kontroller at .
Å bruke kastformlene som kontroll uten å slå av dragleddet. Rekkevidden gjelder bare uten motstand. Å sammenlikne den med den numeriske rekkevidden med drag og konkludere at koden er feil, er en klassisk feilslutning — forskjellen er fysikk, ikke feil.
Å oppgi nedslagsfarten uten retning. Farten ved nedslag er en vektorstørrelse: «, rettet skrått nedover med under vannrett». Manglende retning på en vektorstørrelse koster typisk 2 poeng.
En medstudent har skrevet denne løkka for kastet i eksempel 2:
for i in range(N - 1):
ay = -g - (D / m) * vy[i]**2
vy[i + 1] = vy[i] + ay * dt
y[i + 1] = y[i] + vy[i + 1] * dta) Finn de to alvorlige feilene, og angi hva hver av dem koster ifølge sensorveiledningene i H2023, V2024 og V2025.
b) Hva skjer fysisk med resultatet på grunn av den første feilen, når ballen har passert toppunktet?
c) Skriv den rettede løkka.
d) Hvorfor ville koden gitt et helt korrekt svar hvis oppgaven i stedet hadde handlet om en ball som slippes rett ned?
Løkke 4 — når drag endrer svaret på et fysikkspørsmål (~12 min)
Numerikk er ikke bare et regneverktøy. Den lar deg svare på spørsmål som ikke har noe analytisk svar i det hele tatt — og av og til er svaret et annet enn det læreboka uten drag ville gitt.
Det klassiske eksempelet er utkastvinkelen. Uten luftmotstand er optimalt, og det følger direkte av , som er størst når . Med luftmotstand finnes ingen slik formel. Men koden kan bare kjøres på nytt for hver vinkel.
For ballen i eksempel 2, med og :
| Vinkel | Rekkevidde med drag | Rekkevidde uten drag |
|---|---|---|
Med luftmotstand ligger optimum ved om lag –, altså lavere enn .
Intuisjon: en høy bane bruker lang tid i lufta, og lang tid i lufta betyr lang tid med bremsing. Motstanden straffer altså de høye banene hardere enn de flate, og optimum forskyves nedover. Jo større og jo større , desto lavere blir den optimale vinkelen — for en golfball eller en kanonkule kan den ligge langt under .
Legg samtidig merke til hvor flatt maksimumet er: mellom og varierer rekkevidden med under én prosent. Det er et generelt trekk ved optimeringsproblemer, og det er verdt en setning i en besvarelse: et flatt maksimum betyr at nøyaktig treff på vinkelen betyr lite.
I kode:
r = np.sqrt(x[i]**2 + y[i]**2)
ax = -GM*x[i]/r**3
ay = -GM*y[i]/r**3Legg merke til tredje potens i nevneren. Kraften går som , og faktoren er komponenten av enhetsvektoren — til sammen . Å skrive i nevneren og glemme normeringen er en av de vanligste feilene i denne innpakningen.
Strukturen er ellers identisk med kastet: fire tabeller, farten oppdatert først, posisjonen med den oppdaterte farten. Gravitasjon og sentralkraftbevegelse behandles i Del 9, som ikke er skrevet ennå — men koden trenger du ikke vente på, for den er den samme malen.
a) Skriv de tre linjene i løkka som regner ut avstanden og de to akselerasjonskomponentene.
b) Skriv de fire oppdateringslinjene i riktig Euler–Cromer-rekkefølge.
c) Satellitten starter i med farten rettet rett oppover i figuren. Skriv initialbetingelsene.
d) Hvilken startfart gir en sirkelbane? Vis hvordan du ville brukt den som kontrollcase for koden.
En sykkelrytter med samlet masse triller nedover en rett bakke med helningsvinkel . Luftmotstanden er kvadratisk med , og rullemotstanden kan settes til en konstant kraft mot bevegelsen. Rytteren starter fra ro.
a) Sett opp bevegelseslikningen langs bakken, med positiv retning nedover bakken.
b) Skriv akselerasjonslinja i kode.
c) Finn den største farten rytteren kan oppnå, uten å kjøre koden.
d) Hvorfor er dette et endimensjonalt problem selv om bevegelsen skjer i et skrått plan?
a) Sett opp bevegelseslikningene på komponentform.
b) Skisser koden, og begrunn metodevalget.
c) Hvordan endres akselerasjonslinjene fra kastet uten vind, og hva må du passe på?
d) Hva blir resultatet i grensen , og hvordan bruker du det som kontroll?
e) En medstudent påstår at vinden bare forskyver hele banen sidelengs med . Vurder påstanden.
En golfball kastes ut med . Uten luftmotstand ville optimal utkastvinkel vært .
a) Forklar hvorfor optimal vinkel med luftmotstand blir lavere enn .
b) For ballen i eksempel 2 ga en kjøring rekkevidden ved , ved og ved . Hvor mye taper du på å bomme med ? Hva forteller det om formen på maksimumet?
c) Hvordan ville du funnet den optimale vinkelen numerisk, uten å prøve deg fram i hånden?
d) En medstudent sier: «Da må optimal vinkel gå mot null når dragkoeffisienten blir stor nok.» Vurder påstanden.
a) Hvorfor kommer en ball ned med lavere fart enn den ble kastet opp med, når det er luftmotstand? Begrunn både med energi og med krefter.
b) En student har skrevet en 2D-kode og kontrollerer den ved å sette og sammenlikne med kastformlene. Koden treffer på fire gjeldende siffer. Kan studenten nå stole på dragleddet? Begrunn.
c) Hvorfor skrives fartens tallverdi v uten indeks i en 2D-kode, mens vx og vy alltid har indeks?
Begrepsbank
Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder kjernestoffet.
Uten drag er og to helt separate likninger som kan løses hver for seg. Med drag kan ingen av dem løses uten den andre.
Koblingen er også grunnen til at numerikk fungerer så godt her: en maskin bryr seg ikke om at to likninger er koblet, så lenge begge kan skrives ned.
At oppturen og nedturen ikke er speilbilder av hverandre når luftmotstanden er med.
For ballen i eksempel 2 tar oppturen og nedturen , og toppunktet ligger nærmere utkastet enn nedslaget. Nedturen er brattere.
Årsaken er at farten er størst i første del av banen, og dragkraften går som kvadratet av farten. Bremsingen er derfor kraftigst tidlig, og ballen har mistet mye av den vannrette farten før den begynner å falle.
Vinkelen som gir størst rekkevidde, som ikke lenger er når luftmotstanden er med.
For ballen i eksempel 2 ligger optimum ved om lag –. Jo større dragkoeffisient og jo større startfart, desto lavere blir vinkelen.
Maksimumet er dessuten flatt: mellom og varierer rekkevidden med under én prosent. Det gjør spørsmålet praktisk uinteressant for en kaster, men prinsipielt interessant — det finnes ingen formel, bare en kjøring.
At en ball som kastes og lander i samme høyde, kommer ned med lavere fart enn den ble kastet med, så snart luftmotstand er med.
Uten motstand er de to like, fordi mekanisk energi er bevart og høyden er den samme. Med motstand gjør dragkraften negativt arbeid i begge faser, og differansen tas fra den kinetiske energien.
For ballen i eksempel 2 er startfarten og nedslagsfarten — et tap på en tredel. Oppgi alltid nedslagsfarten med retning: her skrått nedover, om lag under vannrett.
D = 0, der koden må gjenskape kastformlene fra kap. 2.2:For eksempel 2 gir koden mot formelens — samsvar på fire gjeldende siffer.
Vær klar over hva kontrollen ikke tester. Med er hele dragleddet slått av, og en hvilken som helst feil der ville passert uoppdaget. Dragleddet må testes separat, med et endimensjonalt fall der -løsningen er fasit.
Dragleddene blir og , mens tyngden og posisjonsoppdateringen er uendret: legemet flytter seg fortsatt med sin egen fart over bakken.
Vinden virker altså bare gjennom luftmotstanden. I vakuum har den ingen virkning i det hele tatt — og en medvind endrer både flytiden og høyden, ikke bare den vannrette avstanden.
Her er komponentene ikke koblet: hver likning inneholder bare sin egen fartskomponent, og hver kan løses analytisk for seg. Det er nettopp derfor den lineære modellen er den som brukes når en oppgave vil ha et lukket svar.
Merk kontrasten: i den lineære modellen trengs verken absoluttverdi eller fellesfaktor , fordi farten står i første potens og fortegnet følger av seg selv.
Uttrykket gjør derfor nøyaktig samme jobb som gjorde i én dimensjon, og det er den samme mekanismen: størrelsen fra en positiv faktor, retningen fra komponenten.
Skriver du i stedet , mister du både fortegnsbyttet og koblingen til den andre komponenten — to feil i ett uttrykk.
Koden regner uten å vite noe om enheter, så et bytte gir ingen feilmelding — bare et pent tall som er galt.
Den raskeste kontrollen er terminalfarten: for den kvadratiske modellen og for den lineære. Får du en terminalfart som er absurd stor eller liten, har du sannsynligvis brukt feil modell.
Strukturen som skiller en 2D-kode fra en 1D-kode:
| 1D | 2D |
|---|---|
x, v | x, y, vx, vy |
| 1 akselerasjonslinje | 2 akselerasjonslinjer + fellesfarten |
| 2 oppdateringslinjer | 4 oppdateringslinjer |
Rekkefølgen inne i løkka er: fellesfarten først, så begge akselerasjonene, så begge fartene, så begge posisjonene.
Å blande rekkefølgen slik at bruker en allerede oppdatert , er en feil som er nesten umulig å se og som gir små, systematiske avvik. Skriv alltid alle fire oppdateringene etter alle akselerasjonene.
Tredje potens i nevneren, ikke andre. Kraften går som , og faktoren er -komponenten av enhetsvektoren inn mot sentrum — til sammen .
Den vanligste feilen er å skrive i nevneren. Symptomet er en bane som er kvalitativt gal på en måte som er lett å se: kraften avtar da altfor sakte med avstanden, og et legeme som skulle unnsluppet, blir fanget.
vinkelrett på radien. Avstanden skal da holde seg konstant gjennom hele simuleringen.
Testen er sterk fordi den treffer tre ting samtidig: begge komponentene (en sirkelbane bruker dem like mye), fortegnene (feil fortegn gir en bane som flyr av gårde), og metoden (med Forward Euler vokser radien jevnt selv i det som skulle vært en perfekt sirkel).
Omløpstiden skal bli , som gir en fjerde, uavhengig kontroll.
Skillet som avgjør om et problem trenger to tabeller eller fire.
En kloss på et skråplan, en perle på en tråd eller en sykkel i en bakke er endimensjonale: bevegelsen er bundet til én linje, og alle krefter dekomponeres langs og på tvers av den, der tverrkomponentene opphever hverandre.
En ball i lufta, en komet eller en satellitt er todimensjonale: ingenting binder dem til en linje.
Det er antallet frie retninger som avgjør, ikke om bevegelsen skjer i et plan. En kloss på et skråplan beveger seg i et plan, men har bare én frihetsgrad.
Den dyreste enkeltfeilen i en 2D-kodedeloppgave: maks 2 av 5 poeng, uansett hvor korrekt resten av koden er.
Symptomet er lett å kjenne igjen: koden har bare y og vy, og beskriver dermed et loddrett kast i stedet for et skrått.
Fellen er nummer #6 i bokas feilregister. Motgiften er en mekanisk vane: tell tabellene før du skriver løkka. To romlige retninger krever fire tabeller, to akselerasjonslinjer og fire oppdateringslinjer.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av den aktuelle utdanningsinstitusjonen. Dette er ikke offisielt studiemateriell. Les mer.