3.4
Numeriske metoder for bevegelse

3.4 Numeriske metoder for bevegelse

Eulers metode i små tidssteg, fall med luftmotstand i Python, valg av tidssteg og modell mot måling.

80 min
14 oppgaver
Eulers metodeTidsstegPythonLuftmotstandTerminalfartModell mot måling
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 14 oppgaver

Numeriske metoder for bevegelse

I kapittel 2.3 brukte vi bevegelseslikningene. De gjelder bare når akselerasjonen er konstant. Det er den i fritt fall uten luftmotstand, der eneste kraft er tyngden og a=ga = g.

Med luftmotstand er det annerledes. For en ball som faller, med positiv retning nedover og luftmotstand L=kv2L = kv^2, gir Newtons andre lov

ma=mg−kv2ma = mg - kv^2

a=g−kmv2a = g - \frac{k}{m}v^2

Akselerasjonen avhenger av farten, og farten endrer seg hele tiden. Det finnes ingen fast verdi av aa å sette inn i bevegelseslikningene.

I dette kapitlet deler vi bevegelsen opp i mange korte tidssteg. I hvert steg regner vi ut akselerasjonen fra kreftene akkurat da, og bruker den til å finne ny fart og ny posisjon. Et program gjør de mange stegene for oss.

I dette kapitlet


- Eulers metode: Δv=a Δt\Delta v = a\,\Delta t og Δs=v Δt\Delta s = v\,\Delta t i små tidssteg
- Fall med luftmotstand i Python, med lister og plott
- Luftmotstand L=kv2L = kv^2 og L=kvL = kv, og terminalfarten som kontroll
- Valg av tidssteg og stoppbetingelse
- Modell mot måling: bestemme kk ved å sammenligne programmet med målinger fra video eller forsøk
Eulers metode
Eulers metode regner ut en bevegelse i korte tidssteg Δt\Delta t. I hvert steg regnes akselerasjonen aa ut fra kreftene, og så oppdateres farten og posisjonen:

vny=v+a Δtsny=s+vny Δttny=t+Δtv_{\text{ny}} = v + a\,\Delta t \qquad s_{\text{ny}} = s + v_{\text{ny}}\,\Delta t \qquad t_{\text{ny}} = t + \Delta t

Akselerasjonen regnes som konstant innenfor hvert steg. Jo kortere tidssteg, jo mer nøyaktig blir resultatet.

Eulers metode

Fra akselerasjon til ny fart


Akselerasjonen er fartsendring per tid. Over et kort tidssteg Δt\Delta t endrer akselerasjonen seg lite, så

a=ΔvΔta = \frac{\Delta v}{\Delta t}

Δv=a Δt\Delta v = a\,\Delta t

vny=v+a Δtv_{\text{ny}} = v + a\,\Delta t

Fra fart til ny posisjon


På samme måte er farten posisjonsendring per tid. Det gir Δs=v Δt\Delta s = v\,\Delta t (vis dette i oppgave 3), og

sny=s+vny Δts_{\text{ny}} = s + v_{\text{ny}}\,\Delta t

Ett steg


I hvert tidssteg gjør vi fire ting, i denne rekkefølgen:
- regner ut akselerasjonen fra kreftene med farten vi har nå
- finner ny fart med Δv=a Δt\Delta v = a\,\Delta t
- finner ny posisjon med Δs=v Δt\Delta s = v\,\Delta t
- legger Δt\Delta t til tiden

Så gjentar vi, med den nye farten. Her bruker vi den nye farten når posisjonen flyttes. Noen programmer flytter posisjonen først, med farten fra starten av steget. Med kort tidssteg gir de to rekkefølgene nesten samme svar.

Hvorfor metoden virker


Innenfor ett steg regner vi som om akselerasjonen er konstant. Det er ikke helt riktig når kraften endrer seg, men feilen i hvert steg blir liten når steget er kort. Når akselerasjonen faktisk er konstant, gir metoden helt riktig fart: vv–tt-grafen er da en rett linje, og hvert steg øker farten med nøyaktig a Δta\,\Delta t.
✏️Eksempel 1: Eulers metode for hånd

En fallskjermhopper med masse 80 kg hopper fra et helikopter som står stille i lufta. Før skjermen åpnes, er luftmotstanden L=kv2L = kv^2 med k=0,25k = 0{,}25 kg/m.

Bruk Eulers metode med Δt=1,0\Delta t = 1{,}0 s, og regn ut farten etter 1, 2 og 3 s. Sammenlign med farten uten luftmotstand.

Positiv retning nedover.

a=g−kmv2=9,81−0,2580v2=9,81−0,003125 v2a = g - \frac{k}{m}v^2 = 9{,}81 - \frac{0{,}25}{80}v^2 = 9{,}81 - 0{,}003125\,v^2

tt (s)vv (m/s)aa (m/s²)vny=v+a Δtv_{\text{ny}} = v + a\,\Delta t (m/s)
009,819{,}810+9,81⋅1,0=9,810 + 9{,}81 \cdot 1{,}0 = 9{,}81
19,819{,}819,81−0,003125⋅9,812=9,519{,}81 - 0{,}003125 \cdot 9{,}81^2 = 9{,}519,81+9,51⋅1,0=19,329{,}81 + 9{,}51 \cdot 1{,}0 = 19{,}32
219,3219{,}329,81−0,003125⋅19,322=8,649{,}81 - 0{,}003125 \cdot 19{,}32^2 = 8{,}6419,32+8,64⋅1,0=27,9619{,}32 + 8{,}64 \cdot 1{,}0 = 27{,}96

Uten luftmotstand:
v=gt=9,81 m/s2⋅3,0 s=29,4 m/sv = gt = 9{,}81 \text{ m/s}^2 \cdot 3{,}0 \text{ s} = 29{,}4 \text{ m/s}
Svar: Farten er ca. 9,8 m/s, 19,3 m/s og 28,0 m/s etter 1, 2 og 3 s. Uten luftmotstand ville den vært 29,4 m/s etter 3 s. Akselerasjonen avtar fordi luftmotstanden øker med farten.

Eulers metode i Python

Et program for Eulers metode har alltid de samme delene:
- konstanter: gg, masse, luftmotstandstall og tidssteget dt
- startverdier: tid, posisjon og fart når bevegelsen starter
- en løkke som gjør ett tidssteg hver gang: akselerasjon, ny fart, ny posisjon, ny tid
- en stoppbetingelse som avslutter løkka, for eksempel når ballen er ved bakken
- lister som tar vare på verdiene, så vi kan skrive ut og plotte dem

Fall uten luftmotstand


g = 9.81        # m/s^2
dt = 0.01       # tidssteg i s
t = 0.0
s = 0.0         # m, positiv nedover
v = 0.0         # m/s, positiv nedover

while s < 100:
    a = g
    v = v + a * dt
    s = s + v * dt
    t = t + dt

print(f"{t:.2f} s   {v:.1f} m/s")

Løkka går så lenge ballen har falt mindre enn 100 m. Programmet skriver ut 4.52 s 44.3 m/s. Bevegelseslikningene gir t=2s/g=4,52t = \sqrt{2s/g} = 4{,}52 s og v=gt=44,3v = gt = 44{,}3 m/s. Uten luftmotstand kan vi altså kontrollere programmet med bevegelseslikningene.

Med luftmotstand


For å ta med luftmotstanden endrer vi bare linja for akselerasjonen:

    a = g - k * v**2 / m

Resten av programmet er det samme. Det er styrken til metoden: alle krefter vi kan skrive som en formel, kan stå i denne linja.

✏️Eksempel 2: Fall med luftmotstand

En ball med masse 0,50 kg slippes fra 100 m høyde. Luftmotstanden er L=kv2L = kv^2 med k=0,0024k = 0{,}0024 kg/m.

a) Lag et program som regner ut falltiden og farten ved bakken, og som plotter farten mot tiden.

b) Sammenlign med fritt fall uten luftmotstand, og kontroller resultatet med terminalfarten.

a) Positiv retning nedover, a=g−kmv2a = g - \dfrac{k}{m}v^2.

from math import sqrt
import matplotlib.pyplot as plt

g = 9.81        # m/s^2
m = 0.50        # masse i kg
k = 0.0024      # luftmotstandstall i kg/m
dt = 0.001      # tidssteg i s

t = 0.0         # tid i s
s = 0.0         # strekning i m, positiv nedover
v = 0.0         # fart i m/s, positiv nedover
tider = [t]
farter = [v]

while s < 100:
    a = g - k * v**2 / m
    v = v + a * dt
    s = s + v * dt
    t = t + dt
    tider.append(t)
    farter.append(v)

print(f"Falltid: {t:.2f} s")
print(f"Fart ved bakken: {v:.1f} m/s")
print(f"Terminalfart: {sqrt(m * g / k):.1f} m/s")

plt.plot(tider, farter)
plt.xlabel("t (s)")
plt.ylabel("v (m/s)")
plt.show()

Utskrift:

Falltid: 4.88 s
Fart ved bakken: 35.5 m/s
Terminalfart: 45.2 m/s

Svar: a) Falltiden er 4,88 s, og farten ved bakken er 35,5 m/s.

b) Uten luftmotstand:

t=2sg=2⋅100 m9,81 m/s2=4,52 st = \sqrt{\frac{2s}{g}} = \sqrt{\frac{2 \cdot 100 \text{ m}}{9{,}81 \text{ m/s}^2}} = 4{,}52 \text{ s}

v=gt=9,81 m/s2⋅4,52 s=44,3 m/sv = gt = 9{,}81 \text{ m/s}^2 \cdot 4{,}52 \text{ s} = 44{,}3 \text{ m/s}

Terminalfart, kvt2=mgkv_t^2 = mg:

vt=mgk=0,50 kg⋅9,81 m/s20,0024 kg/m=45,2 m/sv_t = \sqrt{\frac{mg}{k}} = \sqrt{\frac{0{,}50 \text{ kg} \cdot 9{,}81 \text{ m/s}^2}{0{,}0024 \text{ kg/m}}} = 45{,}2 \text{ m/s}

Svar: b) Uten luftmotstand tar fallet 4,52 s, og farten blir 44,3 m/s. Med luftmotstand tar fallet 0,36 s lenger, og farten er 8,8 m/s lavere. Farten ved bakken er mindre enn terminalfarten 45,2 m/s, slik den må være: ballen nærmer seg terminalfarten, men rekker ikke å nå den på 100 m.

Luftmotstand i programmet

To modeller


Luftmotstanden virker alltid mot bevegelsen. To modeller er vanlige:

ModellPasser forTerminalfart
L=kv2L = kv^2de fleste gjenstander i lufta: baller, mennesker, bilervt=mgkv_t = \sqrt{\dfrac{mg}{k}}
L=kvL = kvsvært små eller lette gjenstander med lav fart: støv, frø, små dråpervt=mgkv_t = \dfrac{mg}{k}

Enheten til kk er kg/m i den første modellen og kg/s i den andre. Hvilken modell som passer, avgjør vi med målinger, se avsnittet om modell mot måling.

Terminalfarten som kontroll


Når farten nærmer seg terminalfarten, går kraftsummen og akselerasjonen mot null. Et riktig program gir derfor en fart som flater ut ved vtv_t, og aldri en fart over vtv_t for en gjenstand som slippes fra ro. Regn ut vtv_t med formelen og sammenlign med utskriften. Det er en rask kontroll av at akselerasjonslinja har riktig fortegn.

Fortegn når retningen skifter

For et fall er det enklest å velge positiv retning nedover. Da virker tyngden i positiv retning og luftmotstanden i negativ.
Kastes ballen opp, skifter bevegelsen retning, og luftmotstanden skifter retning med den. Med positiv retning oppover kan vi skrive det med en if-test:

    if v > 0:                       # på vei opp: luftmotstanden virker nedover
        a = -g - k * v**2 / m
    else:                           # på vei ned: luftmotstanden virker oppover
        a = -g + k * v**2 / m

Modell mot måling

Et program gir bare riktige svar hvis modellen er god. Vi tester modellen ved å sammenligne programmet med målinger.

Målingene


Vi filmer et fall og leser av posisjonen i hvert bilde med et videoanalyseprogram, eller vi bruker en bevegelsessensor. Da får vi en tabell med tid og posisjon. Gjenstanden bør være lett i forhold til størrelsen, for eksempel en muffinsform, et kaffefilter eller en fjærball, så luftmotstanden betyr mye allerede etter kort fall.

Bestemme kk ved å prøve seg fram


- Vi kjører programmet med en gjettet verdi av kk og lagrer posisjonen ved de samme tidene som i målingene.
- Vi sammenligner modell og måling, i et plott eller med summen av de kvadrerte avvikene ∑(smodell−sma˚lt)2\sum (s_{\text{modell}} - s_{\text{målt}})^2.
- Vi prøver nye verdier av kk til summen er så liten som mulig.

Avvikene kvadreres så positive og negative avvik ikke opphever hverandre, og så store avvik teller mer enn små.

Kontroll og vurdering


- Terminalfarten: den siste, rette delen av ss–tt-grafen gir vtv_t som stigningstall. Da er k=mgvt2k = \dfrac{mg}{v_t^2}, uavhengig av programmet.
- Formen på modellen: passer kurven dårlig for alle verdier av kk, kan det være modellen som er feil. Prøv L=kvL = kv i stedet for L=kv2L = kv^2, eller mål terminalfarten med dobbel masse: med L=kv2L = kv^2 blir den 2\sqrt{2} ganger så stor, med L=kvL = kv dobbelt så stor.
- Gyldighetsområde: en modell som passer for et kort fall i et klasserom, trenger ikke passe for høyere fart eller en annen form.
✏️Eksempel 3: Muffinsform i fritt fall

En muffinsform av papir har masse 0,80 g. Den slippes fra ro, og fallet filmes. Tabellen viser hvor langt formen har falt:

tt (s)0,10,20,30,40,50,60,70,80,91,0
ss (m)0,050,140,270,390,520,640,760,891,021,14

a) Lag et program som simulerer fallet med L=kv2L = kv^2 for k=3,0k = 3{,}0, 4,04{,}0, 5,05{,}0, 6,06{,}0 og 7,0⋅10−37{,}0 \cdot 10^{-3} kg/m, og som regner ut summen av de kvadrerte avvikene fra målingene. Hvilken kk passer best?
b) Bestem terminalfarten fra målingene, og kontroller kk med den.

c) Hvor langt ville formen falt på 1,0 s uten luftmotstand? Vurder modellen.

a) Positiv retning nedover. Programmet lagrer posisjonen hvert 0,1 s, altså hvert 100. steg.

i % 100 er resten når i deles på 100, så i % 100 == 0 er sann for i = 100, 200, 300, …

Tall med tierpotens skrives med e: 3.0e-3 betyr 3,0⋅10−33{,}0 \cdot 10^{-3}, og {k:.1e} skriver ut k på samme form med én desimal.

g = 9.81        # m/s^2
m = 0.00080     # masse i kg
dt = 0.001      # tidssteg i s
malt = [0.05, 0.14, 0.27, 0.39, 0.52, 0.64, 0.76, 0.89, 1.02, 1.14]   # s i m, hvert 0,1 s

for k in [3.0e-3, 4.0e-3, 5.0e-3, 6.0e-3, 7.0e-3]:
    v = 0.0
    s = 0.0
    modell = []
    for i in range(1, 1001):         # 1000 steg = 1,0 s
        a = g - k * v**2 / m
        v = v + a * dt
        s = s + v * dt
        if i % 100 == 0:             # lagre hvert 0,1 s
            modell.append(s)
    sum_avvik = 0.0
    for j in range(len(malt)):
        sum_avvik = sum_avvik + (modell[j] - malt[j])**2
    print(f"k = {k:.1e}: sum = {sum_avvik:.4f} m^2")

Utskrift:

k = 3.0e-03: sum = 0.2746 m^2
k = 4.0e-03: sum = 0.0488 m^2
k = 5.0e-03: sum = 0.0002 m^2
k = 6.0e-03: sum = 0.0260 m^2
k = 7.0e-03: sum = 0.0854 m^2

Svar: a) k=5,0⋅10−3k = 5{,}0 \cdot 10^{-3} kg/m gir klart minst sum av kvadrerte avvik.

b) Fra 0,5 s til 1,0 s øker ss jevnt, så formen faller med terminalfarten:

vt=ΔsΔt=1,14 m−0,52 m1,0 s−0,5 s=1,24 m/sv_t = \frac{\Delta s}{\Delta t} = \frac{1{,}14 \text{ m} - 0{,}52 \text{ m}}{1{,}0 \text{ s} - 0{,}5 \text{ s}} = 1{,}24 \text{ m/s}

k=mgvt2=0,00080 kg⋅9,81 m/s2(1,24 m/s)2=5,1⋅10−3 kg/mk = \frac{mg}{v_t^2} = \frac{0{,}00080 \text{ kg} \cdot 9{,}81 \text{ m/s}^2}{(1{,}24 \text{ m/s})^2} = 5{,}1 \cdot 10^{-3} \text{ kg/m}

Svar: b) vt=1,24v_t = 1{,}24 m/s, som gir k=5,1⋅10−3k = 5{,}1 \cdot 10^{-3} kg/m. Det stemmer med a).

c)

s=12gt2=12⋅9,81 m/s2⋅(1,0 s)2=4,9 ms = \tfrac{1}{2}gt^2 = \tfrac{1}{2} \cdot 9{,}81 \text{ m/s}^2 \cdot (1{,}0 \text{ s})^2 = 4{,}9 \text{ m}

Svar: c) 4,9 m, mer enn fire ganger så langt som målt. Luftmotstanden er avgjørende for en muffinsform. Modellen med L=kv2L = kv^2 og k=5,0⋅10−3k = 5{,}0 \cdot 10^{-3} kg/m treffer alle målingene innenfor 1 cm, så den beskriver dette fallet godt.

Oppgaver

Lett4 oppgaver
1Opplasting
2Opplasting
3Opplasting
4Python
Medium6 oppgaver
5Opplasting
6Opplasting
7Opplasting
8Opplasting
9Opplasting
10Opplasting
Vanskelig4 oppgaver
11Python
12Opplasting
13Opplasting
14Python

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.