Eulers metode i små tidssteg, fall med luftmotstand i Python, val av tidssteg og modell mot måling.
Numeriske metodar for rørsle
I kapittel 2.3 brukte vi rørslelikningane. Dei gjeld berre når akselerasjonen er konstant. Det er han i fritt fall utan luftmotstand, der den einaste krafta er tyngda og .
Med luftmotstand er det annleis. For ein ball som fell, med positiv retning nedover og luftmotstand , gir Newtons andre lov
Akselerasjonen avheng av farten, og farten endrar seg heile tida. Det finst ingen fast verdi av å setje inn i rørslelikningane.
I dette kapittelet deler vi rørsla opp i mange korte tidssteg. I kvart steg reknar vi ut akselerasjonen frå kreftene akkurat då, og brukar han til å finne ny fart og ny posisjon. Eit program gjer dei mange stega for oss.
I dette kapittelet
- Eulers metode: og i små tidssteg
- Fall med luftmotstand i Python, med lister og plott
- Luftmotstand og , og terminalfarten som kontroll
- Val av tidssteg og stoppvilkår
- Modell mot måling: bestemme ved å samanlikne programmet med målingar frå video eller forsøk
Akselerasjonen blir rekna som konstant innanfor kvart steg. Jo kortare tidssteg, jo meir nøyaktig blir resultatet.
Eulers metode
Frå akselerasjon til ny fart
Akselerasjonen er fartsendring per tid. Over eit kort tidssteg endrar akselerasjonen seg lite, så
Frå fart til ny posisjon
På same måte er farten posisjonsendring per tid. Det gir (vis dette i oppgåve 3), og
Eitt steg
I kvart tidssteg gjer vi fire ting, i denne rekkjefølgja:
- reknar ut akselerasjonen frå kreftene med farten vi har no
- finn ny fart med
- finn ny posisjon med
- legg til tida
Så gjentek vi, med den nye farten. Her brukar vi den nye farten når posisjonen blir flytta. Somme program flyttar posisjonen først, med farten frå starten av steget. Med kort tidssteg gir dei to rekkjefølgjene nesten same svar.
Kvifor metoden verkar
Innanfor eitt steg reknar vi som om akselerasjonen er konstant. Det er ikkje heilt rett når krafta endrar seg, men feilen i kvart steg blir liten når steget er kort. Når akselerasjonen faktisk er konstant, gir metoden heilt rett fart: –-grafen er då ei rett linje, og kvart steg aukar farten med nøyaktig .
Ein fallskjermhoppar med masse 80 kg hoppar frå eit helikopter som står stille i lufta. Før skjermen blir opna, er luftmotstanden med kg/m.
Bruk Eulers metode med s, og rekn ut farten etter 1, 2 og 3 s. Samanlikn med farten utan luftmotstand.
| (s) | (m/s) | (m/s²) | (m/s) |
|---|---|---|---|
| 0 | 0 | ||
| 1 | |||
| 2 |
Utan luftmotstand:
Svar: Farten er ca. 9,8 m/s, 19,3 m/s og 28,0 m/s etter 1, 2 og 3 s. Utan luftmotstand ville han vore 29,4 m/s etter 3 s. Akselerasjonen minkar fordi luftmotstanden aukar med farten.
Eulers metode i Python
Eit program for Eulers metode har alltid dei same delane:
- konstantar: , masse, luftmotstandstal og tidssteget dt
- startverdiar: tid, posisjon og fart når rørsla startar
- ei løkke som gjer eitt tidssteg kvar gong: akselerasjon, ny fart, ny posisjon, ny tid
- eit stoppvilkår som avsluttar løkka, til dømes når ballen er ved bakken
- lister som tek vare på verdiane, så vi kan skrive ut og plotte dei
Fall utan 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 falle mindre enn 100 m. Programmet skriv ut 4.52 s 44.3 m/s. Rørslelikningane gir s og m/s. Utan luftmotstand kan vi altså kontrollere programmet med rørslelikningane.
Med luftmotstand
For å ta med luftmotstanden endrar vi berre linja for akselerasjonen:
a = g - k * v**2 / mResten av programmet er det same. Det er styrken til metoden: alle krefter vi kan skrive som ein formel, kan stå i denne linja.
Ein ball med masse 0,50 kg blir sleppt frå 100 m høgd. Luftmotstanden er med kg/m.
a) Lag eit program som reknar ut falltida og farten ved bakken, og som plottar farten mot tida.
b) Samanlikn med fritt fall utan luftmotstand, og kontroller resultatet med terminalfarten.
from math import sqrt
import matplotlib.pyplot as plt
g = 9.81 # m/s^2
m = 0.50 # masse i kg
k = 0.0024 # luftmotstandstal 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/sSvar: a) Falltida er 4,88 s, og farten ved bakken er 35,5 m/s.
b) Utan luftmotstand:
Terminalfart, :
Svar: b) Utan luftmotstand tek fallet 4,52 s, og farten blir 44,3 m/s. Med luftmotstand tek fallet 0,36 s lenger, og farten er 8,8 m/s lågare. Farten ved bakken er mindre enn terminalfarten 45,2 m/s, slik han må vere: ballen nærmar seg terminalfarten, men rekk ikkje å nå han på 100 m.
Luftmotstand i programmet
To modellar
Luftmotstanden verkar alltid mot rørsla. To modellar er vanlege:
| Modell | Passar for | Terminalfart |
|---|---|---|
| dei fleste gjenstandar i lufta: ballar, menneske, bilar | ||
| svært små eller lette gjenstandar med låg fart: støv, frø, små dropar |
Eininga til er kg/m i den første modellen og kg/s i den andre. Kva for ein modell som passar, avgjer vi med målingar, sjå avsnittet om modell mot måling.
Terminalfarten som kontroll
Når farten nærmar seg terminalfarten, går kraftsummen og akselerasjonen mot null. Eit rett program gir difor ein fart som flatar ut ved , og aldri ein fart over for ein gjenstand som blir sleppt frå ro. Rekn ut med formelen og samanlikn med utskrifta. Det er ein rask kontroll av at akselerasjonslinja har rett forteikn.
Forteikn når retninga skiftar
For eit fall er det enklast å velje positiv retning nedover. Då verkar tyngda i positiv retning og luftmotstanden i negativ.
Blir ballen kasta opp, skiftar rørsla retning, og luftmotstanden skiftar retning med ho. Med positiv retning oppover kan vi skrive det med ein if-test:
if v > 0: # på veg opp: luftmotstanden verkar nedover
a = -g - k * v**2 / m
else: # på veg ned: luftmotstanden verkar oppover
a = -g + k * v**2 / mKontroll: køyr programmet med halvt så stort tidssteg. Endrar svaret seg mindre enn nøyaktigheita du treng, er tidssteget lite nok.
Feilen i Eulers metode er omtrent proporsjonal med : ti gonger mindre tidssteg gir omtrent ti gonger mindre feil, men ti gonger så mange steg.
Talet på steg: ei løkke med for i in range(n) simulerer tida . Gjer du dt mindre, må n bli større for at programmet skal simulere like lang tid.
- Akselerasjonen blir rekna ut før løkka. Då blir han konstant, og luftmotstanden følgjer ikkje farten. Linja a = … skal stå inne i løkka.
- Feil forteikn. Luftmotstanden skal verke mot rørsla. Gir programmet ein fart over terminalfarten, er forteiknet truleg feil.
- Feil stoppvilkår. while v > 0 stoppar når ballen snur på toppen, while s < 100 når han har falle 100 m. Tenk gjennom kva løkka skal vente på.
- Tida blir ikkje oppdatert. Utan t = t + dt blir tida ståande på null.
- Desimaltal med komma. Python brukar punktum: 0.0024, ikkje 0,0024.
Modell mot måling
Eit program gir berre rette svar dersom modellen er god. Vi testar modellen ved å samanlikne programmet med målingar.
Målingane
Vi filmar eit fall og les av posisjonen i kvart bilete med eit videoanalyseprogram, eller vi brukar ein rørslesensor. Då får vi ein tabell med tid og posisjon. Gjenstanden bør vere lett i forhold til storleiken, til dømes ei muffinsform, eit kaffifilter eller ein fjørball, så luftmotstanden betyr mykje alt etter kort fall.
Bestemme ved å prøve seg fram
- Vi køyrer programmet med ein gjetta verdi av og lagrar posisjonen ved dei same tidene som i målingane.
- Vi samanliknar modell og måling, i eit plott eller med summen av dei kvadrerte avvika .
- Vi prøver nye verdiar av til summen er så liten som mogleg.
Avvika blir kvadrerte så positive og negative avvik ikkje opphevar kvarandre, og så store avvik tel meir enn små.
Kontroll og vurdering
- Terminalfarten: den siste, rette delen av –-grafen gir som stigingstal. Då er , uavhengig av programmet.
- Forma på modellen: passar kurva dårleg for alle verdiar av , kan det vere modellen som er feil. Prøv i staden for , eller mål terminalfarten med dobbel masse: med blir han gonger så stor, med dobbelt så stor.
- Gyldigheitsområde: ein modell som passar for eit kort fall i eit klasserom, treng ikkje passe for høgare fart eller ei anna form.
Ei muffinsform av papir har masse 0,80 g. Ho blir sleppt frå ro, og fallet blir filma. Tabellen viser kor langt forma har falle:
| (s) | 0,1 | 0,2 | 0,3 | 0,4 | 0,5 | 0,6 | 0,7 | 0,8 | 0,9 | 1,0 |
|---|---|---|---|---|---|---|---|---|---|---|
| (m) | 0,05 | 0,14 | 0,27 | 0,39 | 0,52 | 0,64 | 0,76 | 0,89 | 1,02 | 1,14 |
a) Lag eit program som simulerer fallet med for , , , og kg/m, og som reknar ut summen av dei kvadrerte avvika frå målingane. Kva for ein passar best?
b) Bestem terminalfarten frå målingane, og kontroller med han.
c) Kor langt ville forma falle på 1,0 s utan luftmotstand? Vurder modellen.
i % 100 er resten når i blir delt på 100, så i % 100 == 0 er sann for i = 100, 200, 300, …
Tal med tiarpotens blir skrivne med e: 3.0e-3 tyder , og {k:.1e} skriv ut k på same form med éin 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, kvart 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 kvart 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^2Svar: a) kg/m gir klart minst sum av kvadrerte avvik.
b) Frå 0,5 s til 1,0 s aukar jamt, så forma fell med terminalfarten:
Svar: b) m/s, som gir kg/m. Det stemmer med a).
c)
Svar: c) 4,9 m, meir enn fire gonger så langt som målt. Luftmotstanden er avgjerande for ei muffinsform. Modellen med og kg/m treffer alle målingane innanfor 1 cm, så han beskriv dette fallet godt.
Oppgaver
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.
