Tilbake
8.2

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.

70 min
8 oppgaver
Drag2D-baner numerisk
Din fremgang i kapitlet
0 / 8 oppgaver

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å:

vi+1=vi+aidt,xi+1=xi+vi+1dtv_{i+1} = v_i + a_i\,dt, \qquad x_{i+1} = x_i + v_{i+1}\,dt

Farten oppdateres først, og den oppdaterte farten brukes i posisjonslinja.

De to dragmodellene fra kap. 7.3:

FD=kvv(lineær),FD=Dvv(kvadratisk)F_D = -k_v v \quad (\text{lineær}), \qquad F_D = -D\lvert v\rvert v \quad (\text{kvadratisk})

Koeffisientene har ulike enheter — kvk_v i kg/s\text{kg/s} og DD i kg/m\text{kg/m} — 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:

vT=mgDv_T = \sqrt{\frac{mg}{D}}

Kastet uten luftmotstand fra kap. 2.2: de to retningene er da helt uavhengige, vxv_x er konstant, og rekkevidden er x1=(v02/g)sin2θx_1 = (v_0^2/g)\sin 2\theta med maksimum ved 4545^\circ. 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 xx og yy, farten vxv_x og vyv_y, og tallverdien av farten skrives v=vx2+vy2v = \sqrt{v_x^2+v_y^2} uten fet markering, siden det er en skalar. Vi regner yy positivt oppover i alle kast, slik at tyngdeleddet blir g-g. Vi bruker g=9,81 m/s2g = 9{,}81\ \text{m/s}^2.

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.

Drag-leddet i koden

Bidraget fra luftmotstanden til akselerasjonslinja, for den kvadratiske modellen:

a = ... - (D/m)*abs(v[i])*v[i]

Uttrykket kommer rett fra kraftmodellen FD=DvvF_D = -D\lvert v\rvert v delt på massen. Dragkoeffisienten DD er ikke masseuavhengig, så den må deles på mm — 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.

Hvorfor `abs(v[i])*v[i]` og ikke `v[i]**2`

Fordi v2v^2 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 yy positivt oppover:

Skrivemåtev=+10v = +10v=10v = -10
Dvv-D\lvert v\rvert v100D-100D (bremser)+100D+100D (bremser)
Dv2-Dv^2100D-100D (bremser)100D-100D (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.

✏️Eksempel 1: Fall med kvadratisk drag — kontrollert mot fasiten

Et legeme med masse m=80,0 gm = 80{,}0\ \text{g} slippes fra ro og faller gjennom lufta med kvadratisk luftmotstand, D=0,00250 kg/mD = 0{,}00250\ \text{kg/m}.

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.

Metodevalg: legemet faller nedover hele veien, så farten skifter ikke fortegn, og likningen har en analytisk løsning — den er derfor et perfekt kontrollcase for koden. Vi regner positiv retning nedover, slik at tyngden blir positiv.

a) Bevegelseslikningen er

mdvdt=mgDvvdvdt=gDmvvm\frac{dv}{dt} = mg - D\lvert v\rvert v \qquad \Longrightarrow \qquad \frac{dv}{dt} = g - \frac{D}{m}\lvert v\rvert v

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.19

b) Tre kontroller, alle uavhengige av koden:

Terminalfarten. vT=mg/D=0,7848/0,00250=17,72 m/sv_T = \sqrt{mg/D} = \sqrt{0{,}7848/0{,}00250} = 17{,}72\ \text{m/s} nedover. Koden gir 17,7178 m/s17{,}7178\ \text{m/s} etter 20 sekunder — den har flatet helt ut ✓.

Forløpet. Den analytiske løsningen for ensrettet fart er v(t)=vTtanh(gt/vT)v(t) = v_T\tanh(gt/v_T). Ved t=2,0 st = 2{,}0\ \text{s} gir den 14,2296 m/s14{,}2296\ \text{m/s}; koden gir 14,2315 m/s14{,}2315\ \text{m/s}. Avviket er 1,9103 m/s1{,}9\cdot 10^{-3}\ \text{m/s}, altså 0,013 %0{,}013\ \% ✓.

Størrelsesorden. Etter 20 sekunder har legemet falt 332 m332\ \text{m}. Hadde det gått med terminalfart hele veien, ville det falt 17,7220=354 m17{,}72\cdot 20 = 354\ \text{m}; forskjellen på 22 m22\ \text{m} 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 vv=v2\lvert v\rvert v = v^2 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.

📝Oppgave 1

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 gg 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:

v=vx2+vy2v = \sqrt{v_x^2 + v_y^2}

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.

Komponentvis integrasjon

Å føre Euler–Cromer-løkka én gang for hver romlig retning, med egne tabeller for hver komponent:

x, y, vx, vy

Alle fire oppdateres i samme gjennomløp av løkka, med samme dtdt og samme indeks ii. 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.

Fartens tallverdi i to dimensjoner
Lengden av hastighetsvektoren, regnet ut på nytt i hvert gjennomløp av løkka:

v=vx2+vy2v = np.sqrt(vx[i]**2 + vy[i]**2)v = \sqrt{v_x^2 + v_y^2} \qquad \longrightarrow \qquad \texttt{v = np.sqrt(vx[i]**2 + vy[i]**2)}

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: vv inneholder begge komponentene, og vv inngår i begge akselerasjonslinjene.

Dragkomponentene
Fordelingen av luftmotstanden på de to aksene. Kraften peker langs v-\mathbf{v}, altså rett mot bevegelsesretningen, og fordeler seg som

FD,x=Dvvx,FD,y=DvvyF_{D,x} = -D\,v\,v_x, \qquad F_{D,y} = -D\,v\,v_y

der v=vx2+vy2v = \sqrt{v_x^2+v_y^2} er tallverdien av farten.

Merk hvor absoluttverdien er blitt av. I én dimensjon skrev vi Dvv-D\lvert v\rvert v. I to dimensjoner er vv per definisjon positiv (det er en lengde), og retningen kommer fra fortegnet på komponenten vxv_x eller vyv_y. Produktet vvxv\,v_x gjør altså nøyaktig samme jobb som vv\lvert v\rvert v 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]
📝Oppgave 2

En ball har i et gitt tidspunkt fartskomponentene vx=18,0 m/sv_x = 18{,}0\ \text{m/s} og vy=12,0 m/sv_y = -12{,}0\ \text{m/s}. Massen er 0,200 kg0{,}200\ \text{kg}, dragkoeffisienten D=0,00150 kg/mD = 0{,}00150\ \text{kg/m}, og yy 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.

Startfarten dekomponert
Oversettelsen fra «kastet med farten v0v_0 i vinkelen θ\theta over vannrett» til de to tallene koden trenger:

vx,0=v0cosθ,vy,0=v0sinθv_{x,0} = v_0\cos\theta, \qquad v_{y,0} = v_0\sin\theta

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: vx,02+vy,02v_{x,0}^2 + v_{y,0}^2 skal gi v02v_0^2 tilbake.

Nedslagskriteriet

Testen som avslutter løkka når legemet treffer bakken:

if y[i+1] < 0:
    break

Løkka oppdager først at yy er blitt negativ, altså i steget etter nedslaget. Med dt=0,0010 sdt = 0{,}0010\ \text{s} og en vannrett fart på 20 m/s20\ \text{m/s} 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 f=yn1/(yn1yn)f = y_{n-1}/(y_{n-1}-y_n) av det siste steget, og nedslaget ved xn1+f(xnxn1)x_{n-1} + f\,(x_n - x_{n-1}).

✏️Eksempel 2 (eksamensnivå): Ballkast med luftmotstand

En ball med masse m=0,145 kgm = 0{,}145\ \text{kg} kastes fra bakkenivå med startfarten v0=32,0 m/sv_0 = 32{,}0\ \text{m/s} i vinkelen 38,038{,}0^\circ over vannrett. Luftmotstanden er kvadratisk med D=0,00110 kg/mD = 0{,}00110\ \text{kg/m}.

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.

Metodevalg: kastet er todimensjonalt, og luftmotstanden kobler komponentene gjennom farten v=vx2+vy2v = \sqrt{v_x^2+v_y^2}. Det finnes derfor ingen lukket løsning, og numerisk integrasjon er ikke en snarvei, men den eneste veien. Vi bruker Euler–Cromer med begge komponenter.

a) To krefter virker på ballen: tyngden mg-mg i yy-retningen, og luftmotstanden langs v-\mathbf{v}. Newtons 2. lov komponentvis, med yy positiv oppover:

md2xdt2=Dvvx,md2ydt2=mgDvvym\frac{d^2x}{dt^2} = -D\,v\,v_x, \qquad m\frac{d^2y}{dt^2} = -mg - D\,v\,v_y

På eksplisitt form:

dvxdt=Dmvvx,dvydt=gDmvvy\frac{dv_x}{dt} = -\frac{D}{m}v\,v_x, \qquad \frac{dv_y}{dt} = -g - \frac{D}{m}v\,v_y

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.37

Begrunnelse 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 vv som felles faktor, slik at kraften automatisk peker mot bevegelsen i alle deler av banen, også etter toppunktet.»

c) Rekkevidde 66,7 m66{,}7\ \text{m}, flytid 3,55 s3{,}55\ \text{s}, høyeste punkt 15,6 m15{,}6\ \text{m}, nedslagsfart 21,4 m/s21{,}4\ \text{m/s}.

d) Uten luftmotstand gir kastformlene fra kap. 2.2:

x1=v02gsin2θ=32,029,81sin76,0=101,3 mx_1 = \frac{v_0^2}{g}\sin 2\theta = \frac{32{,}0^2}{9{,}81}\sin 76{,}0^\circ = 101{,}3\ \text{m}

t1=2v0gsinθ=64,09,81sin38,0=4,02 s,h=(v0sinθ)22g=19,8 mt_1 = \frac{2v_0}{g}\sin\theta = \frac{64{,}0}{9{,}81}\sin 38{,}0^\circ = 4{,}02\ \text{s}, \qquad h = \frac{(v_0\sin\theta)^2}{2g} = 19{,}8\ \text{m}

StørrelseUten dragMed dragEndring
Rekkevidde101,3 m101{,}3\ \text{m}66,7 m66{,}7\ \text{m}34 %-34\ \%
Flytid4,02 s4{,}02\ \text{s}3,55 s3{,}55\ \text{s}12 %-12\ \%
Høyeste punkt19,8 m19{,}8\ \text{m}15,6 m15{,}6\ \text{m}21 %-21\ \%
Nedslagsfart32,0 m/s32{,}0\ \text{m/s}21,4 m/s21{,}4\ \text{m/s}33 %-33\ \%

Fysisk forklaring på hver av dem:
Rekkevidden faller mest. Den vannrette farten er ikke lenger konstant — motstanden spiser av vxv_x 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 1,69 s1{,}69\ \text{s} opp og 1,86 s1{,}86\ \text{s} 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 D=0D = 0 i den samme koden, gir den rekkevidde 101,26 m101{,}26\ \text{m} mot formelens 101,28 m101{,}28\ \text{m}. 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 —

Slik ser den håndskrevne eksamensversjonen ut
📝Oppgave 3

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] * dt

a) 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 4545^\circ optimalt, og det følger direkte av x1=(v02/g)sin2θx_1 = (v_0^2/g)\sin 2\theta, som er størst når 2θ=902\theta = 90^\circ. Med luftmotstand finnes ingen slik formel. Men koden kan bare kjøres på nytt for hver vinkel.

For ballen i eksempel 2, med v0=32,0 m/sv_0 = 32{,}0\ \text{m/s} og D=0,00110 kg/mD = 0{,}00110\ \text{kg/m}:

VinkelRekkevidde med dragRekkevidde uten drag
3535^\circ65,7 m65{,}7\ \text{m}98,1 m98{,}1\ \text{m}
3838^\circ66,7 m66{,}7\ \text{m}101,3 m101{,}3\ \text{m}
4141^\circ67,2 m67{,}2\ \text{m}103,4 m103{,}4\ \text{m}
4242^\circ67,2 m67{,}2\ \text{m}103,8 m103{,}8\ \text{m}
4545^\circ66,8 m66{,}8\ \text{m}104,4 m104{,}4\ \text{m}
4848^\circ65,8 m65{,}8\ \text{m}103,8 m103{,}8\ \text{m}

Med luftmotstand ligger optimum ved om lag 41414242^\circ, altså lavere enn 4545^\circ.
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 DD og jo større v0v_0, desto lavere blir den optimale vinkelen — for en golfball eller en kanonkule kan den ligge langt under 4040^\circ.
Legg samtidig merke til hvor flatt maksimumet er: mellom 3838^\circ og 4545^\circ 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.
Gravitasjon på komponentform
Den andre store 2D-innpakningen: et legeme i bane rundt et tyngdepunkt. Kraften peker inn mot sentrum og avtar med kvadratet av avstanden, og komponentformen blir

ax=GMx(x2+y2)3/2,ay=GMy(x2+y2)3/2a_x = -\frac{GM\,x}{\left(x^2+y^2\right)^{3/2}}, \qquad a_y = -\frac{GM\,y}{\left(x^2+y^2\right)^{3/2}}

I kode:

r = np.sqrt(x[i]**2 + y[i]**2)
ax = -GM*x[i]/r**3
ay = -GM*y[i]/r**3

Legg merke til tredje potens i nevneren. Kraften går som 1/r21/r^2, og faktoren x/rx/r er komponenten av enhetsvektoren — til sammen x/r3x/r^3. Å skrive r2r^2 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.

📝Oppgave 4
En satellitt går i bane rundt en planet. Bevegelseslikningene på komponentform er

d2xdt2=GMx(x2+y2)3/2,d2ydt2=GMy(x2+y2)3/2\frac{d^2x}{dt^2} = -\frac{GM\,x}{\left(x^2+y^2\right)^{3/2}}, \qquad \frac{d^2y}{dt^2} = -\frac{GM\,y}{\left(x^2+y^2\right)^{3/2}}

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 (r0,0)(r_0, 0) 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.

📝Oppgave 5

En sykkelrytter med samlet masse m=78,0 kgm = 78{,}0\ \text{kg} triller nedover en rett bakke med helningsvinkel θ=4,0\theta = 4{,}0^\circ. Luftmotstanden er kvadratisk med D=0,230 kg/mD = 0{,}230\ \text{kg/m}, og rullemotstanden kan settes til en konstant kraft Fr=12,0 NF_r = 12{,}0\ \text{N} 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?

📝Oppgave 6
(Eksamensnivå, sjanger H — den numeriske deloppgaven.) En kule med masse mm skytes ut fra bakkenivå med startfarten v0v_0 i vinkelen θ\theta over vannrett. I tillegg til tyngden virker kvadratisk luftmotstand Dvv-D\lvert\mathbf{v}\rvert\mathbf{v}, og det blåser en jevn vannrett vind med farten ww i positiv xx-retning. Luftmotstanden virker mot kulas fart relativt til lufta.

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 w0w \to 0, og hvordan bruker du det som kontroll?

e) En medstudent påstår at vinden bare forskyver hele banen sidelengs med wtw\,t. Vurder påstanden.

📝Oppgave 7

En golfball kastes ut med v0=45,0 m/sv_0 = 45{,}0\ \text{m/s}. Uten luftmotstand ville optimal utkastvinkel vært 4545^\circ.

a) Forklar hvorfor optimal vinkel med luftmotstand blir lavere enn 4545^\circ.

b) For ballen i eksempel 2 ga en kjøring rekkevidden 66,7 m66{,}7\ \text{m} ved 3838^\circ, 67,2 m67{,}2\ \text{m} ved 4141^\circ og 66,8 m66{,}8\ \text{m} ved 4545^\circ. Hvor mye taper du på å bomme med 77^\circ? 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.

📝Oppgave 8
(Kvalitativ.) Svar i to–fire setninger per punkt.

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 D=0D = 0 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.

Koblingen mellom komponentene
Det som gjør et 2D-kast med luftmotstand analytisk uløselig: begge komponentlikningene inneholder begge fartskomponentene, gjennom fellesfaktoren

v=vx2+vy2v = \sqrt{v_x^2+v_y^2}

Uten drag er dvx/dt=0dv_x/dt = 0 og dvy/dt=gdv_y/dt = -g 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.

Kastets usymmetri med drag

At oppturen og nedturen ikke er speilbilder av hverandre når luftmotstanden er med.

For ballen i eksempel 2 tar oppturen 1,69 s1{,}69\ \text{s} og nedturen 1,86 s1{,}86\ \text{s}, 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.

Optimal utkastvinkel med drag

Vinkelen som gir størst rekkevidde, som ikke lenger er 4545^\circ når luftmotstanden er med.

For ballen i eksempel 2 ligger optimum ved om lag 41414242^\circ. Jo større dragkoeffisient og jo større startfart, desto lavere blir vinkelen.

Maksimumet er dessuten flatt: mellom 3838^\circ og 4545^\circ 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.

Nedslagsfart kontra startfart

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 32,0 m/s32{,}0\ \text{m/s} og nedslagsfarten 21,4 m/s21{,}4\ \text{m/s} — et tap på en tredel. Oppgi alltid nedslagsfarten med retning: her skrått nedover, om lag 4848^\circ under vannrett.

Kontrollcase for en 2D-kode
Kjøringen med D = 0, der koden må gjenskape kastformlene fra kap. 2.2:

x1=v02gsin2θ,t1=2v0gsinθ,h=(v0sinθ)22gx_1 = \frac{v_0^2}{g}\sin 2\theta, \qquad t_1 = \frac{2v_0}{g}\sin\theta, \qquad h = \frac{(v_0\sin\theta)^2}{2g}

For eksempel 2 gir koden 101,26 m101{,}26\ \text{m} mot formelens 101,28 m101{,}28\ \text{m} — samsvar på fire gjeldende siffer.

Vær klar over hva kontrollen ikke tester. Med D=0D = 0 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 tanh\tanh-løsningen er fasit.

Vind i koden
Utvidelsen der luftmotstanden bygges på farten relativt til lufta, ikke farten over bakken:

ux=vxw,uy=vy,u=ux2+uy2u_x = v_x - w, \qquad u_y = v_y, \qquad u = \sqrt{u_x^2+u_y^2}

Dragleddene blir Duux-Du\,u_x og Duuy-Du\,u_y, 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.

Lineær drag i to dimensjoner
Den enklere modellen, der motstanden er proporsjonal med farten:

FD,x=kvvx,FD,y=kvvyF_{D,x} = -k_v v_x, \qquad F_{D,y} = -k_v v_y

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 vv, fordi farten står i første potens og fortegnet følger av seg selv.

Fellesfaktoren vv som fortegnsvakt
Grunnen til at 2D-formen Dvvx-Dv\,v_x ikke trenger noen absoluttverdi: vv er en lengde og dermed alltid positiv, mens fortegnet kommer fra komponenten vxv_x.

Dvvxhar alltid motsatt fortegn av vx-D\,v\,v_x \quad \text{har alltid motsatt fortegn av } v_x

Uttrykket gjør derfor nøyaktig samme jobb som Dvv-D\lvert v\rvert v gjorde i én dimensjon, og det er den samme mekanismen: størrelsen fra en positiv faktor, retningen fra komponenten.

Skriver du i stedet Dvx2-Dv_x^2, mister du både fortegnsbyttet og koblingen til den andre komponenten — to feil i ett uttrykk.

Enhetskontroll av dragkoeffisienten i kode
Regelen om at DD og kvk_v ikke kan byttes om, siden de har helt ulike enheter:

[D]=kg/m,[kv]=kg/s[D] = \text{kg/m}, \qquad [k_v] = \text{kg/s}

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: vT=mg/Dv_T = \sqrt{mg/D} for den kvadratiske modellen og vT=mg/kvv_T = mg/k_v for den lineære. Får du en terminalfart som er absurd stor eller liten, har du sannsynligvis brukt feil modell.

Fire tabeller, åtte linjer

Strukturen som skiller en 2D-kode fra en 1D-kode:

1D2D
x, vx, y, vx, vy
1 akselerasjonslinje2 akselerasjonslinjer + fellesfarten
2 oppdateringslinjer4 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 aya_y bruker en allerede oppdatert vxv_x, er en feil som er nesten umulig å se og som gir små, systematiske avvik. Skriv alltid alle fire oppdateringene etter alle akselerasjonene.

Sentralkraft på komponentform
Formen alle 1/r21/r^2-krefter får når de skal inn i en 2D-kode:

ax=GMxr3,ay=GMyr3,r=x2+y2a_x = -\frac{GM\,x}{r^3}, \qquad a_y = -\frac{GM\,y}{r^3}, \qquad r = \sqrt{x^2+y^2}

Tredje potens i nevneren, ikke andre. Kraften går som 1/r21/r^2, og faktoren x/rx/r er xx-komponenten av enhetsvektoren inn mot sentrum — til sammen x/r3x/r^3.

Den vanligste feilen er å skrive r2r^2 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.

Sirkelbanen som kontrollcase
Den beste testen av en 2D-kode med sentralkraft: sett startfarten til

v=GMr0v = \sqrt{\frac{GM}{r_0}}

vinkelrett på radien. Avstanden rr 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 Tp=2πr0/vT_p = 2\pi r_0/v, som gir en fjerde, uavhengig kontroll.

Én frihetsgrad eller to

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.

Poengfellen «bare én komponent»

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.

Symbol- og formelliste
Repetisjonsoppgaver

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.