Tilbake
8.3

8.3 Feilvurdering, kodemodifikasjon og trapesmetode

Kjenne igjen at Forward Euler «lekker energi», rette det, utvide koden med et nytt kraftledd, og integrere måledata med trapesmetoden.

65 min
8 oppgaver
Feilvurderingkodemodifikasjontrapesmetode
Din fremgang i kapitlet
0 / 8 oppgaver

Forkunnskaper — sist du var her

Dette kapitlet bygger på kap. 8.2 og kap. 5.1. Det du trenger derfra, ferdig oppfrisket:

Euler–Cromer-løkka i to dimensjoner fra forrige kapittel — fire tabeller, fellesfarten først, begge fartene før begge posisjonene:

vx,i+1=vx,i+ax,idt,xi+1=xi+vx,i+1dtv_{x,i+1} = v_{x,i} + a_{x,i}\,dt, \qquad x_{i+1} = x_i + v_{x,i+1}\,dt

og tilsvarende for yy.

Sentralkraft på komponentform, som er innpakningen i de fleste feilvurderingsoppgavene:

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}}

Arbeidsintegralet fra kap. 5.1, som er hele grunnlaget for trapesdelen:

W=x1x2F(x)dxW = \int_{x_1}^{x_2} F(x)\,dx

Arbeidet er arealet under kraftkurven. Er kraften konstant, er arealet et rektangel; varierer den, må arealet regnes ut — og har du bare måledata, må det regnes ut numerisk.

Fra matematikken: Numerisk integrasjon gir trapesmetoden med jevne intervaller. Her generaliserer vi den til ujevne intervaller, som er det måledata faktisk gir.

Notasjonsavtale for kapitlet. I baneeksemplene regner vi i astronomiske enheter: avstand i AU (astronomiske enheter, altså jordbanens radius) og tid i år. Da er gravitasjonsparameteren for sola GM=4π2 AU3/a˚r2GM = 4\pi^2\ \text{AU}^3/\text{år}^2, et tall som er verdt å kjenne. I trapesdelen er alt i SI. Vi bruker g=9,81 m/s2g = 9{,}81\ \text{m/s}^2.

Løkke 1 — å lese en feil ut av en graf (~16 min)

En student simulerer en komet rundt sola og får en bane som sakte spiraler utover. Kometen kommer aldri tilbake til utgangspunktet — hvert omløp er litt større enn det forrige.

Er dette fysikk eller en feil?

Spørsmålet er ikke retorisk. Det finnes fysiske grunner til at en bane kan utvide seg: en rakettmotor, en drivende kraft, energi tilført utenfra. Men i en simulering av ren gravitasjon finnes ingen slik mekanisme — gravitasjonen er konservativ, og den mekaniske energien skal være bevart. En voksende bane er derfor et varsel om at koden gjør noe likningen ikke gjør.

Energilekkasje som metodefeil

At den numeriske metoden selv tilfører eller fjerner mekanisk energi, i et system der energien fysisk skal være konstant.

Forward Euler bruker den gamle farten i posisjonsoppdateringen. For en bane eller en svingning betyr det at legemet konsekvent flyttes litt for langt utover før kraften rekker å trekke det inn igjen, og feilen peker samme vei i hvert eneste steg.

Konsekvensen er ikke støy, men en trend. Energien vokser jevnt, og siden banens størrelse er bestemt av energien, vokser banen med den. Det er dette som gir spiralen.

Euler–Cromer bruker den oppdaterte farten, og feilen skifter fortegn gjennom omløpet. Energien svinger da rundt riktig verdi uten å vandre av gårde.

Diagnosen: metodefeil eller modellfeil

Testen som avgjør hvilken av de to feiltypene du har med å gjøre: kjør på nytt med halvert steglengde.

ObservasjonDiagnose
Avviket blir om lag halvertMetodefeil — for grov diskretisering
Avviket krymper mot null når du bytter til Euler–CromerMetodefeil — energilekkasje
Avviket står helt urørtModellfeil — manglende kraftledd, galt fortegn, feil initialbetingelse

Testen tar ett minutt, og den er den eneste som skiller entydig. Å gjette på fysikk før halveringstesten er tatt, er den vanligste feilslutningen i numerisk modellering — man ender med å lete etter en fysisk forklaring på noe som bare er en for stor dtdt.

✏️Eksempel 1: Kometbanen som ikke lukker seg

En komet passerer sola i avstanden 1,00 AU1{,}00\ \text{AU} med farten 7,50 AU/a˚r7{,}50\ \text{AU/år} vinkelrett på radien. Vi regner i astronomiske enheter, der GM=4π2 AU3/a˚r2GM = 4\pi^2\ \text{AU}^3/\text{år}^2.

a) Simulér fem omløp med både Forward Euler og Euler–Cromer, med samme steglengde, og sammenlikn den største avstanden fra sola.

b) Hva er den analytiske fasiten for den største avstanden?

c) Hvilken av metodene er riktig, og hva ville du svart en student som lurte på om spiralen var fysikk?

Metodevalg: vi bruker den største avstanden fra sola — aphelavstanden — som måltall, fordi den er direkte bestemt av den mekaniske energien. Er energien bevart, er aphelavstanden den samme i alle omløp.

a)

import numpy as np

GM = 4 * np.pi**2       # AU^3/aar^2
N = 11501
dt = 0.0010             # aar

for metode in ["Euler-Cromer", "Forward Euler"]:
    x = np.zeros(N)
    y = np.zeros(N)
    vx = np.zeros(N)
    vy = np.zeros(N)
    x[0] = 1.00         # AU, perihel
    vy[0] = 7.50        # AU/aar
    for i in range(N - 1):
        r = np.sqrt(x[i]**2 + y[i]**2)
        ax = -GM * x[i] / r**3
        ay = -GM * y[i] / r**3
        if metode == "Euler-Cromer":
            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
        else:
            x[i + 1] = x[i] + vx[i] * dt
            y[i + 1] = y[i] + vy[i] * dt
            vx[i + 1] = vx[i] + ax * dt
            vy[i + 1] = vy[i] + ay * dt
    r = np.sqrt(x**2 + y**2)
    print(metode, " aphel forste omlop:", round(np.max(r[:2400]), 4),
          " aphel femte omlop:", round(np.max(r[9200:]), 4))

Utskrift:

Euler-Cromer  aphel forste omlop: 2.4773  aphel femte omlop: 2.4773
Forward Euler  aphel forste omlop: 2.5688  aphel femte omlop: 3.1334

b) Den mekaniske energien per masseenhet er

Em=12v2GMr=127,5024π21,00=28,12539,478=11,353\frac{E}{m} = \frac12 v^2 - \frac{GM}{r} = \frac12 \cdot 7{,}50^2 - \frac{4\pi^2}{1{,}00} = 28{,}125 - 39{,}478 = -11{,}353

Negativ energi betyr en lukket bane. Den store halvaksen følger av E/m=GM/(2a)E/m = -GM/(2a):

a=GM2E/m=39,47822,706=1,7386 AUa = \frac{GM}{2\lvert E/m\rvert} = \frac{39{,}478}{22{,}706} = 1{,}7386\ \text{AU}

Siden startpunktet er perihel med r=1,00 AUr = 1{,}00\ \text{AU}, er aphelavstanden

raphel=2arperihel=21,73861,00=2,4772 AUr_{\text{aphel}} = 2a - r_{\text{perihel}} = 2\cdot 1{,}7386 - 1{,}00 = 2{,}4772\ \text{AU}

c) Euler–Cromer treffer fasiten 2,4772 AU2{,}4772\ \text{AU} på fire gjeldende siffer — og gjør det like godt i femte omløp som i første. Forward Euler bommer allerede med 3,7 %3{,}7\ \% i første omløp og med 26 %26\ \% i det femte.

Svaret til studenten: spiralen er ikke fysikk. Gravitasjonen er konservativ, så den mekaniske energien skal være nøyaktig bevart, og en lukket bane skal lukke seg i all evighet. En bane som utvider seg jevnt, betyr at energien vokser — og det finnes ingenting i likningen som kan tilføre energi. Feilen ligger i metoden: Forward Euler bruker den gamle farten i posisjonsoppdateringen og legger til litt energi i hvert eneste steg.

Kontrollen som avgjør: kjør på nytt med halvert dtdt. Spiralen blir da omtrent halvert i styrke, og det beviser at den er en diskretiseringseffekt. Var den fysikk, ville den stått helt urørt.

Sensorblikk: deloppgaven ber om en forklaring, og en fullgod besvarelse har tre ledd: at energien fysisk skal være bevart, at Forward Euler bryter dette fordi den bruker gammel fart, og hvordan det rettes. Å svare «koden er feil» uten mekanismen gir liten uttelling.

De tre rettemetodene

Når en simulering viser energidrift, finnes tre grep, i denne rekkefølgen:

1. Bytt til Euler–Cromer. Oppdater farten først og bruk den oppdaterte farten på posisjonen. Dette er nesten alltid det riktige svaret i dette emnet, det koster to linjers omskriving, og det fjerner driften helt.

2. Reduser steglengden. Halverer du dtdt, halveres driften — men den forsvinner ikke. Med Forward Euler kjøper du bare tid, og for lange simuleringer blir det raskt uoverkommelig dyrt.

3. Bruk en høyere ordens metode. Det finnes metoder der feilen går som dt4dt^4 i stedet for dtdt. De er kraftigere, men mer å skrive.

Rangeringen er ikke tilfeldig. Grep 1 fjerner årsaken; grep 2 og 3 demper symptomet. En besvarelse som bare foreslår mindre dtdt, har ikke sett hva som faktisk er galt.

Runge–Kutta — beredskap, ikke satsingsområde

En familie av høyere ordens metoder, der akselerasjonen evalueres flere ganger inne i hvert tidssteg og resultatene veies sammen. Den vanligste varianten har en feil som går som dt4dt^4.

Dette er stoff du bare skal kjenne til. Metoden er nevnt i emnebeskrivelsen, men Euler–Cromer er metoden sensor forventer og premierer, og det er den som skal kunne skrives for hånd. Det finnes ingen drill og ingen oppgaver på Runge–Kutta i denne boka, og du skal ikke bruke tid på å pugge koeffisientene.

Det du kan si i en besvarelse, er at høyere ordens metoder finnes og gir raskere konvergens — som ett av tre mulige grep mot numerisk feil. Mer enn den ene setningen trengs ikke.

📝Oppgave 1

Forklar med egne ord, i to–tre setninger hver:

a) hvorfor en planetbane som spiraler utover i en simulering, er et varsel om en feil og ikke om fysikk,

b) hva halveringstesten er, og hva den skiller mellom,

c) hvorfor «reduser dtdt» er et dårligere svar enn «bytt til Euler–Cromer» når banen spiraler.

Løkke 2 — kodemodifikasjon (~16 min)

Den andre nyere undertypen er denne: du har en fungerende kode, og så kommer det en ny opplysning. En ny kraft, en ny betingelse, en ny effekt. Vis hvordan du endrer koden.

Oppgaven er lettere enn den ser ut, fordi svaret nesten alltid ligger i én linje — akselerasjonslinja. Løkkestrukturen, tabellene og initialbetingelsene er uendret.

Men det er én ting som må sitte, og det er nettopp den sensor sjekker.

Kodemodifikasjon

Å utvide en eksisterende simulering med et nytt kraftledd, ved å legge det til i akselerasjonslinja.

Framgangsmåten er alltid den samme:

1. skriv den nye kraften som en vektor, med retning;
2. dekomponer den langs aksene;
3. del på massen, med mindre kraften selv er proporsjonal med massen;
4. legg leddet til i akselerasjonslinja med riktig fortegn.

Alt annet i koden er uendret. Det er også noe du skal si eksplisitt i besvarelsen — at initialbetingelsene, løkkestrukturen og oppdateringsrekkefølgen er de samme. Da viser du at du vet hvor endringen hører hjemme, ikke bare at du klarte å skrive et nytt uttrykk.

Advarsel: en besvarelse som kunne vært skrevet uten å ha lest den nye opplysningen, gir null poeng. Å endre for lite er dyrere enn å endre litt feil.

Masseavhengig kontra masseuavhengig kraftledd
Den ene detaljen som skiller de som får poeng fra de som ikke gjør det i en kodemodifikasjon.

Tyngden er proporsjonal med massen, F=mgF = mg, så bidraget til akselerasjonen er mg/m=gmg/m = g — massen forkortes, og den skal ikke stå i akselerasjonslinja.

Gravitasjonen fra et sentrallegeme er også proporsjonal med legemets masse, F=GMm/r2F = GMm/r^2, så bidraget er GM/r2GM/r^2 — masseuavhengig.

Alle andre krefter må deles på massen. Luftmotstand DvvD\lvert v\rvert v, fjærkraft kxkx, rullemotstand FrF_r, en solvind s/r2s/r^2 — ingen av dem inneholder legemets masse, så bidraget til akselerasjonen er kraften delt på mm.

a=Fmalltid— men mgm=g og GMm/r2m=GMr2a = \frac{F}{m} \quad \text{alltid} \qquad \text{— men } \frac{mg}{m} = g \text{ og } \frac{GMm/r^2}{m} = \frac{GM}{r^2}

Testen er enkel: står det en mm i kraftuttrykket? Da forkortes den. Gjør det ikke det? Da må du dele.

✏️Eksempel 2 (eksamensnivå): Kometen møter en solvind
Kometen fra eksempel 1 har massen mm. Sola begynner å sende ut en solvind som skyver kometen radielt utover med kraften

Fs=sr2F_s = \frac{s}{r^2}

der ss er en konstant og rr er avstanden til sola.

a) Vis hvordan akselerasjonslinjene endres, og forklar hvorfor massen nå må stå i uttrykket.

b) Vis at solvinden virker som en reduksjon av sentrallegemets gravitasjonsparameter, og finn den effektive verdien.

c) Kjør simuleringen for s/m=0s/m = 0, 4,004{,}00 og 8,00 AU3/a˚r28{,}00\ \text{AU}^3/\text{år}^2, og tolk resultatet.

d) Hva skjer når s/ms/m nærmer seg GMGM?

Metodevalg: vi skriver den nye kraften som en vektor, dekomponerer, deler på massen, og legger leddet til i akselerasjonslinjene. Resten av koden er uendret — samme tabeller, samme initialbetingelser, samme Euler–Cromer-løkke.

a) Solvinden peker utover, altså langs +r^+\hat{\mathbf{r}}, mens gravitasjonen peker innover. Enhetsvektoren utover har komponentene x/rx/r og y/ry/r, så

Fs,x=sr2xr=sxr3,Fs,y=syr3F_{s,x} = \frac{s}{r^2}\cdot\frac{x}{r} = \frac{s\,x}{r^3}, \qquad F_{s,y} = \frac{s\,y}{r^3}

Kraften s/r2s/r^2 inneholder ingen faktor mm — den er bestemt av kometens tverrsnitt og av solstrålingen, ikke av hvor tung kometen er. Akselerasjonsbidraget er derfor Fs/mF_s/m, og massen blir stående:

ax=GMxr3+smxr3,ay=GMyr3+smyr3a_x = -\frac{GM\,x}{r^3} + \frac{s}{m}\cdot\frac{x}{r^3}, \qquad a_y = -\frac{GM\,y}{r^3} + \frac{s}{m}\cdot\frac{y}{r^3}

I kode blir de to linjene:

ax = -GM*x[i]/r**3 + (s/m)*x[i]/r**3
ay = -GM*y[i]/r**3 + (s/m)*y[i]/r**3

Kontrasten er hele poenget. Gravitasjonsleddet står uten masse, fordi gravitasjonskraften GMm/r2GMm/r^2 selv inneholder mm som forkortes. Solvindleddet står med masse, fordi s/r2s/r^2 ikke gjør det. To ledd i samme linje, og bare det ene har en mm i nevneren — det er akkurat den forskjellen sensor ser etter.

b) Begge leddene har samme form, bare med motsatt fortegn:

ax=(GMs/m)xr3a_x = -\frac{\left(GM - s/m\right)x}{r^3}

Solvinden virker altså nøyaktig som om sola var lettere:

GMeff=GMsmGM_{\text{eff}} = GM - \frac{s}{m}

Det er et pent resultat, og det er verdt å skrive ut: en radiell 1/r21/r^2-kraft utover kan ikke skilles fra en svakere tyngdekraft, så lenge den har samme avstandsavhengighet.

c)

import numpy as np

GM = 4 * np.pi**2
N = 2501
dt = 0.0010

for s_over_m in [0.0, 4.00, 8.00]:
    x = np.zeros(N); y = np.zeros(N)
    vx = np.zeros(N); vy = np.zeros(N)
    x[0] = 1.00
    vy[0] = 7.50
    for i in range(N - 1):
        r = np.sqrt(x[i]**2 + y[i]**2)
        ax = -GM * x[i] / r**3 + s_over_m * x[i] / r**3
        ay = -GM * y[i] / r**3 + s_over_m * y[i] / r**3
        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
    r = np.sqrt(x**2 + y**2)
    print("s/m =", s_over_m, " storste avstand:", round(np.max(r), 4), "AU")

Utskrift:

s/m = 0.0  storste avstand: 2.4773 AU
s/m = 4.0  storste avstand: 3.8249 AU
s/m = 8.0  storste avstand: 6.4618 AU

Tolkning: solvinden svekker den innadrettede kraften, kometen holdes dårligere fast, og banen blir større. Med s/m=4,00s/m = 4{,}00 er GMeff=39,4784,00=35,478GM_{\text{eff}} = 39{,}478 - 4{,}00 = 35{,}478, altså 10 %10\ \% svakere, og aphelavstanden vokser fra 2,482{,}48 til 3,82 AU3{,}82\ \text{AU} — en økning på 54 %54\ \%. En liten endring i kraften gir en stor endring i banen, fordi kometen allerede er nær grensen der banen ikke lenger lukker seg.

d) Når s/mGMs/m \to GM, går GMeff0GM_{\text{eff}} \to 0: den samlede radielle kraften forsvinner, og kometen fortsetter rett fram med konstant fart. For s/m>GMs/m > GM blir den samlede kraften rettet utover, og kometen skyves bort fra sola og kommer aldri tilbake.

Overgangen skjer i praksis før den grensen. Banen slutter å være lukket allerede når den mekaniske energien blir positiv, altså når

12v02GMeffr0>0GMeff<127,5021,00=28,125\frac12 v_0^2 - \frac{GM_{\text{eff}}}{r_0} > 0 \quad \Longrightarrow \quad GM_{\text{eff}} < \frac12 \cdot 7{,}50^2 \cdot 1{,}00 = 28{,}125

altså når s/m>39,47828,125=11,35 AU3/a˚r2s/m > 39{,}478 - 28{,}125 = 11{,}35\ \text{AU}^3/\text{år}^2. Kjøringen med s/m=8,00s/m = 8{,}00 ligger fortsatt under, og banen er lukket — men nå er omløpstiden vokst til over elleve år, og de 2,52{,}5 årene koden simulerer, rekker ikke engang ut til aphel. De 6,46 AU6{,}46\ \text{AU} er der kometen står når løkka stopper, fortsatt på vei utover; den virkelige aphelavstanden er 8,39 AU8{,}39\ \text{AU}. Lærdommen er å sjekke at kjøringen faktisk dekker et helt omløp før du leser av en aphelavstand.

— naturlig pausepunkt —

📝Oppgave 2

En kode simulerer en ladet støvpartikkel med masse mm i bane rundt en planet. Akselerasjonslinjene er

ax = -GM*x[i]/r**3
ay = -GM*y[i]/r**3

Nå opplyses det at partikkelen i tillegg påvirkes av en konstant kraft F0\mathbf{F}_0 med tallverdi F0F_0, rettet i positiv xx-retning, og av en luftmotstand Dvv-D\lvert\mathbf{v}\rvert\mathbf{v} fra en tynn gassky.

a) Skriv de nye akselerasjonslinjene.

b) For hvert av de tre kraftleddene: skal massen stå i uttrykket eller ikke? Begrunn hver av dem.

c) Hvilke andre deler av koden må endres?

d) En medstudent leverer koden uendret og skriver «kraften er så liten at den ikke betyr noe». Vurder svaret.

Løkke 3 — trapesmetoden på måledata (~18 min)

Den tredje undertypen er annerledes. Her skal du ikke løse en differensiallikning i det hele tatt — du skal integrere en tabell.

Situasjonen er denne: et forsøk har målt kraften på et legeme i en rekke posisjoner, og du skal finne arbeidet. Fra kap. 5.1 vet du at

W=x1x2F(x)dxW = \int_{x_1}^{x_2} F(x)\,dx

altså arealet under kraftkurven. Men du har ingen funksjon F(x)F(x) — du har åtte punkter.

Og punktene ligger ikke jevnt. Det er nettopp det som gjør oppgaven verdt fem poeng.

Trapesmetoden på ujevne data
Å tilnærme arealet under en målekurve med en rekke trapeser, ett mellom hvert par nabopunkt, der hvert trapes får sin egen bredde:

W=iFi+1+Fi2(xi+1xi)W = \sum_{i} \frac{F_{i+1}+F_i}{2}\left(x_{i+1}-x_i\right)

I kode:

W = 0
for i in range(n-1):
    W += (F[i+1] + F[i]) * (x[i+1] - x[i]) / 2

Faktoren (Fi+1+Fi)/2(F_{i+1}+F_i)/2 er gjennomsnittshøyden i trapeset, og (xi+1xi)(x_{i+1}-x_i) er bredden. Produktet er arealet.

Bredden må hentes fra dataene, ikke antas. Skriver du en fast Δx\Delta x, regner du på et rutenett som ikke finnes — og feilen kan bli hvilken som helst størrelse, avhengig av hvordan punktene faktisk ligger.

Fast-steglengde-fellen
Å bruke den vanlige trapesformelen med konstant Δx\Delta x på data som er ujevnt fordelt:

WΔx(F02+F1+F2++Fn12),Δx=xn1x0n1W \approx \Delta x\left(\frac{F_0}{2} + F_1 + F_2 + \dots + \frac{F_{n-1}}{2}\right), \qquad \Delta x = \frac{x_{n-1}-x_0}{n-1}

Formelen er riktig — for jevne data. På ujevne data gir den systematisk feil, fordi den vekter alle punktene likt uansett hvor tett de ligger.

For datasettet i eksempel 3 gir den riktige metoden 32,2 J32{,}2\ \text{J} og fast-steg-formelen 22,9 J22{,}9\ \text{J}: 29 %29\ \% for lavt. Retningen på feilen avhenger av hvor de tette punktene ligger — her ligger de der kraften er liten, og de får dermed altfor stor vekt.

Kontrollen er å se på dataene før du regner: er avstandene like? Er de ikke det, må hver bredde regnes for seg.

Arbeidsintegralet numerisk
Å finne arbeidet fra måledata ved å summere arealet under kraftkurven, i stedet for å integrere en formel.

W=x1x2F(x)dxW=iFi+1+Fi2ΔxiW = \int_{x_1}^{x_2} F(x)\,dx \qquad \longrightarrow \qquad W = \sum_i \frac{F_{i+1}+F_i}{2}\Delta x_i

Metoden gjelder for kraftkomponenten langs bevegelsen. Er kraften ikke parallell med forflytningen, er det FcosθF\cos\theta som skal integreres — akkurat som i det analytiske arbeidsintegralet.

Trapesmetoden overvurderer arealet under en konveks kurve (en som krummer oppover) og undervurderer det under en konkav. For en kraft som vokser stadig raskere med strekningen — en typisk fjær eller strikk — vil svaret derfor ligge litt for høyt, og avviket krymper når du måler tettere.

✏️Eksempel 3 (eksamensnivå): Arbeid fra en måleserie

En strikk strekkes langsomt, og kraften måles ved åtte posisjoner:

x (m)x\ (\text{m})0,0000{,}0000,0200{,}0200,0500{,}0500,0900{,}0900,1400{,}1400,2200{,}2200,3100{,}3100,4000{,}400
F (N)F\ (\text{N})0,00{,}05,05{,}013,513{,}526,526{,}545,445{,}481,881{,}8132,1132{,}1192,0192{,}0

a) Skriv koden som finner arbeidet, og forklar hvorfor den ikke kan bruke en fast steglengde.
b) Kjør koden, og oppgi arbeidet.

c) En tilpasning til dataene gir F(x)240x+600x2F(x) \approx 240x + 600x^2 i SI-enheter. Bruk den til å kontrollere svaret.

d) Gjør en kvalitetssjekk av resultatet: benevning, størrelsesorden og retning på avviket.

Metodevalg: arbeidet er arealet under kraftkurven, og med bare åtte målepunkter er trapesmetoden den naturlige tilnærmingen. Kraften virker langs strekkretningen, så hele kraften bidrar til arbeidet — ingen cosθ\cos\theta trengs.

a) Avstandene mellom punktene er 0,0200{,}020, 0,0300{,}030, 0,0400{,}040, 0,0500{,}050, 0,0800{,}080, 0,0900{,}090 og 0,090 m0{,}090\ \text{m} — de vokser med over en faktor fire gjennom serien. En fast steglengde ville derfor vektet de tette punktene i starten altfor tungt og de spredte til slutt altfor lett.

import numpy as np

x = np.array([0.000, 0.020, 0.050, 0.090, 0.140, 0.220, 0.310, 0.400])
F = np.array([0.0, 5.0, 13.5, 26.5, 45.4, 81.8, 132.1, 192.0])

W = 0.0
for i in range(len(x) - 1):
    W += (F[i + 1] + F[i]) * (x[i + 1] - x[i]) / 2
print("arbeid, trapes med ujevne steg:", round(W, 3), "J")

dx = (x[-1] - x[0]) / (len(x) - 1)
Wfeil = dx * (F[0] / 2 + np.sum(F[1:-1]) + F[-1] / 2)
print("arbeid, feilaktig fast steg:   ", round(Wfeil, 3), "J")

Utskrift:

arbeid, trapes med ujevne steg: 32.223 J
arbeid, feilaktig fast steg:    22.874 J

b) Arbeidet er W=32,2 JW = 32{,}2\ \text{J}.

Fast-steg-formelen gir 22,9 J22{,}9\ \text{J}, altså 29 %29\ \% for lavt. Det er en feil som er stor nok til å endre konklusjonen i en hvilken som helst oppgave — og den kommer utelukkende av å ha antatt et rutenett dataene ikke har.

c) Med F(x)=240x+600x2F(x) = 240x + 600x^2 er

W=00,400(240x+600x2)dx=[120x2+200x3]00,400W = \int_0^{0{,}400}\left(240x + 600x^2\right)dx = \left[120x^2 + 200x^3\right]_0^{0{,}400}

W=1200,1600+2000,0640=19,20+12,80=32,00 JW = 120\cdot 0{,}1600 + 200\cdot 0{,}0640 = 19{,}20 + 12{,}80 = 32{,}00\ \text{J}

Trapessummen 32,22 J32{,}22\ \text{J} ligger 0,7 %0{,}7\ \% over. Det er nøyaktig det fortegnet man skal vente: kraftkurven krummer oppover, og et trapes mellom to punkt på en oppoverkrummet kurve ligger over kurven. Trapesmetoden overvurderer derfor arealet under en konveks kurve.

Legger vi inn ett ekstra målepunkt midt i det siste, brede intervallet, faller summen til 32,17 J32{,}17\ \text{J} — avviket krymper når dataene blir tettere, som det skal.

d) Fire kontroller:

Benevning. [Nm]=J[\text{N}\cdot\text{m}] = \text{J} ✓ — kraft ganger strekning er arbeid.

Størrelsesorden. Kraften vokser fra null til 192 N192\ \text{N} over 0,400 m0{,}400\ \text{m}. En grov middelkraft på om lag 80 N80\ \text{N} over den strekningen gir 32 J32\ \text{J} — samme størrelsesorden ✓. Et anslag på 77 J77\ \text{J} (middelkraften satt lik maksimalkraften) ville vært for høyt, fordi kurven ligger under den rette linja mesteparten av veien.

Retning på avviket. Trapes over en konveks kurve overvurderer, og svaret ligger over den analytiske verdien ✓. At avviket har det fortegnet teorien forutsier, er en sterkere kontroll enn at det er lite.

Rimelighet. 32 J32\ \text{J} er energien i en gjenstand på ett kilogram løftet drøyt tre meter. For en kraftig strukket strikk er det helt rimelig.

Sensorblikk: deloppgaven har fem poeng, og de fordeler seg typisk som riktig formel med varierende bredde (2 p), riktig gjennomført summering (2 p) og enhet med kvalitetssjekk (1 p). Å levere tallet uten et ord om enhet eller rimelighet er å la det siste poenget ligge, og det er det billigste i hele oppgaven.

Slik ser den håndskrevne eksamensversjonen ut
📝Oppgave 3

En kraft måles langs en bevegelse i fem posisjoner:

x (m)x\ (\text{m})0,000{,}000,100{,}100,300{,}300,600{,}601,001{,}00
F (N)F\ (\text{N})20,020{,}018,018{,}014,014{,}08,08{,}00,00{,}0

a) Finn arbeidet med trapesmetoden, ledd for ledd.
b) Hva ville en fast steglengde Δx=0,25 m\Delta x = 0{,}25\ \text{m} gitt?

c) Kraften følger tilsynelatende F(x)=20,0(1x)F(x) = 20{,}0(1-x). Kontroller svaret analytisk.

d) Hvorfor treffer trapesmetoden eksakt i dette tilfellet, mens den bommet med 0,7 %0{,}7\ \% i eksempel 3?

Løkke 4 — kvalitetssjekk av et numerisk svar (~12 min)

Et numerisk svar er et tall uten historie. Det kommer ikke med en utledning du kan lese fortegnene ut av, og det protesterer ikke om det er feil med en faktor tusen.

Derfor har alle numeriske svar i denne boka en kvalitetssjekk knyttet til seg, og derfor skal din også ha det.

Kvalitetssjekk av et numerisk svar

De fire kontrollene som skal følge ethvert tall som kommer ut av en kode:

1. Benevning. Har svaret riktig enhet? En terminalfart i m2/s2\text{m}^2/\text{s}^2 er en glemt kvadratrot; et arbeid i N\text{N} er en glemt strekning.

2. Størrelsesorden. Er tallet fysisk rimelig? En sykkel i 200 km/h200\ \text{km/h}, en pendel med sekstisekundersperiode eller et kast på ti kilometer er varsler som en enkel overslagsregning fanger.

3. Grensetilfelle. Slå av det vanskelige leddet og sjekk mot en kjent formel. Dette er den sterkeste av de fire, fordi den tester hele koden mot en uavhengig fasit.

4. Konvergens. Halvér steglengden — eller mål tettere — og se om svaret er stabilt.

Alle fire kan skrives i en håndskrevet besvarelse uten maskin, og til sammen tar de under et minutt. De er blant de billigste poengene i hele settet.

📝Oppgave 4

En student har skrevet en kode for en satellitt i bane og får disse resultatene. Vurder hvert av dem med en kvalitetssjekk, og si hva som mest sannsynlig er galt der noe er galt.

a) Banefarten i en sirkelbane om jorda i 400 km400\ \text{km} høyde blir 7,67 m/s7{,}67\ \text{m/s}.

b) Omløpstiden for den samme banen blir 5540 s5540\ \text{s}.

c) Radien i det som skulle vært en sirkelbane, vokser jevnt fra 6,78106 m6{,}78\cdot 10^6\ \text{m} til 7,12106 m7{,}12\cdot 10^6\ \text{m} i løpet av ti omløp.

d) Arbeidet fra en måleserie blir 45 J-45\ \text{J}, mens kraften er positiv i alle målepunktene og bevegelsen går i positiv retning.

📝Oppgave 5
(Eksamensnivå, sjanger H med kvalitativ del.) En student modellerer en romsonde i bane rundt en planet med denne løkka:

for i in range(N - 1):
    r = np.sqrt(x[i]**2 + y[i]**2)
    ax = -GM * x[i] / r**2
    ay = -GM * y[i] / r**2
    x[i + 1] = x[i] + vx[i] * dt
    y[i + 1] = y[i] + vy[i] * dt
    vx[i + 1] = vx[i] + ax * dt
    vy[i + 1] = vy[i] + ay * dt

Sonden skulle gå i en lukket ellipsebane, men banen blir helt gal.

a) Finn de to feilene, og si for hver av dem om den er en modellfeil eller en metodefeil.

b) Hva ville halveringstesten vist for hver av dem?

c) Skriv den rettede løkka.

d) Sonden får nå en ionemotor som gir en konstant kraft FmF_m i fartsretningen. Vis hvordan akselerasjonslinjene endres.

e) Forklar hvorfor en slik motor over tid gjør banen større, uten å regne.

📝Oppgave 6

Et forsøk måler dragkraften på en modellbil i en vindtunnel ved sju vindhastigheter:

v (m/s)v\ (\text{m/s})0,00{,}05,05{,}08,08{,}012,012{,}018,018{,}025,025{,}030,030{,}0
FD (N)F_D\ (\text{N})0,00{,}01,11{,}12,92{,}96,56{,}514,514{,}528,028{,}040,340{,}3

a) Passer dataene best med en lineær eller en kvadratisk dragmodell? Begrunn med tall.
b) Anslå dragkoeffisienten, og oppgi enheten.

c) Bilen har masse 2,40 kg2{,}40\ \text{kg} og settes til å rulle fritt fra 30,0 m/s30{,}0\ \text{m/s} på et vannrett underlag uten rullemotstand. Skriv koden som finner hvor langt den ruller før farten er halvert.

d) Uten å kjøre koden: er strekningen større eller mindre enn den ville vært med lineær drag med samme kraft ved 30 m/s30\ \text{m/s}? Begrunn.

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

a) En student skriver: «Jeg fikk en spiral, så jeg reduserte dtdt med en faktor ti, og da ble den nesten borte. Problemet er løst.» Vurder svaret.

b) Hvorfor er det verre å endre for lite enn å endre litt feil i en kodemodifikasjonsoppgave?

c) En tabell med måledata har jevne intervaller. Er det da likegyldig hvilken trapesformel du bruker? Begrunn.

📝Oppgave 8

En komet har mekanisk energi per masseenhet E/m=12v2GM/rE/m = \tfrac12 v^2 - GM/r. I astronomiske enheter er GM=4π2 AU3/a˚r2GM = 4\pi^2\ \text{AU}^3/\text{år}^2.

a) Kometen er i r=1,00 AUr = 1{,}00\ \text{AU} med farten 7,50 AU/a˚r7{,}50\ \text{AU/år}. Finn energien og avgjør om banen er lukket.

b) Finn den store halvaksen og aphelavstanden, gitt E/m=GM/(2a)E/m = -GM/(2a).

c) Hvorfor er nettopp energien et godt måltall for å avsløre en metodefeil i en banesimulering?

d) Hvilken fart ville gitt en åpen bane fra samme startpunkt?

Begrepsbank

Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder kjernestoffet.

Bevart størrelse som feildetektor

Den mest treffsikre kontrollen på en simulering: finn en størrelse som fysisk skal være konstant, og se om den er det.

For en svingning eller en bane er det den mekaniske energien. For et system uten ytre kraftmoment er det i tillegg spinnet.

Kontrollen er sterk av tre grunner: størrelsen er ett tall som kan følges gjennom hele forløpet, den er regnet ut på en annen vei enn koden går, og et avvik er entydig en feil — ingen fysisk mekanisme i modellen kan endre den.

Effektiv gravitasjonsparameter
Resultatet av at en radiell 1/r21/r^2-kraft utover legges til gravitasjonen: de to leddene slås sammen til ett.

ar=GMr2+s/mr2=GMs/mr2GMeff=GMsma_r = -\frac{GM}{r^2} + \frac{s/m}{r^2} = -\frac{GM - s/m}{r^2} \quad \Longrightarrow \quad GM_{\text{eff}} = GM - \frac{s}{m}

En radiell 1/r21/r^2-kraft utover kan ikke skilles fra en svakere tyngdekraft, så lenge den har samme avstandsavhengighet. Kometen oppfører seg nøyaktig som om sola var lettere.

Sammenslåingen er også et godt eksempel på hvorfor det lønner seg å skrive uttrykk symbolsk før man setter inn tall: strukturen blir synlig.

Interpolasjon mellom to datapunkt
Å finne en verdi mellom to lagrede punkt ved å anta rett linje imellom.

Trengs typisk ved nedslag, der løkka først oppdager at yy er blitt negativ. Brøkdelen av det siste steget er

f=yn1yn1ynf = \frac{y_{n-1}}{y_{n-1}-y_n}

og nedslagspunktet blir xn1+f(xnxn1)x_{n-1} + f\left(x_n - x_{n-1}\right).

Samme idé ligger under trapesmetoden: begge antar rett linje mellom nabopunkt, og begge er derfor eksakte for lineære forløp og tilnærmet ellers.

Størrelsesordenskontroll

Å sammenlikne et numerisk svar med et grovt overslag før man stoler på det.

Noen faste holdepunkter i mekanikk: en satellitt i lav jordbane går i om lag 7,7 km/s7{,}7\ \text{km/s} med omløpstid 90 minutter90\ \text{minutter}; en fallskjermhopper i fritt fall når 505060 m/s60\ \text{m/s}; en sekundpendel er en halv meter lang; et menneske yter i størrelsesorden 100 W100\ \text{W} over tid.

Kontrollen fanger den ene feiltypen ingen annen tar: enhetsblanding. En kode som får kilometer og meter i samme regnestykke, gir et pent tall som er galt med en faktor tusen — og som ikke utløser noen feilmelding.

Konvergens i trapesmetoden

At trapessummen nærmer seg det riktige integralet når målepunktene ligger tettere.

Feilen i ett trapes går som h3fh^3 f'', der hh er bredden. Summert over hele intervallet går den samlede feilen som h2h^2: halverer du avstanden mellom punktene, blir feilen en firedel.

Det gjør trapesmetoden til en andreordens metode, altså bedre enn Euler–Cromer på sitt felt. For datasettet i eksempel 3 falt avviket fra 0,7 %0{,}7\ \% til 0,5 %0{,}5\ \% ved å legge inn ett eneste ekstra punkt i det bredeste intervallet.

Fortegnet på trapesfeilen

Trapesmetoden overvurderer arealet under en konveks kurve (en som krummer oppover) og undervurderer det under en konkav.

Grunnen er geometrisk: en rett linje mellom to punkt på en oppoverkrummet kurve ligger over kurven, så trapeset dekker mer enn arealet.

For en fjær eller strikk, der kraften vokser stadig raskere med strekningen, ligger trapessummen derfor litt for høyt. At avviket har det fortegnet teorien forutsier, er en sterkere kontroll enn at det er lite — et lite avvik med feil fortegn er et varsel.

Å endre for lite i en kodemodifikasjon

Den dyreste feilen i modifikasjonsoppgavene: null poeng, ikke delvis uttelling.

Regelen om at det gis poeng for en god løsningsidé selv om den ikke fullføres, forutsetter at det finnes en idé. En besvarelse som kunne vært levert uten å ha lest den nye opplysningen, viser ingenting av den ferdigheten deloppgaven tester.

En liten feil i det nye leddet er derfor mye bedre enn ingen endring. Feil fortegn eller glemt masse er et forsøk; uendret kode er det ikke.

Numerisk integrasjon kontra numerisk løsning av en ODE

To beslektede, men ulike oppgaver, som begge går under «numerisk integrasjon» i dagligtale.

Numerisk integrasjon av en tabell (trapesmetoden): du kjenner funksjonsverdiene og skal finne arealet under dem. Ingen differensiallikning er involvert, og svaret er ett tall.

Numerisk løsning av en differensiallikning (Euler–Cromer): du kjenner ikke funksjonen, bare loven for hvordan den endrer seg, og svaret er en hel tallrekke.

Begge finnes i eksamenssettene, og de skilles på spørsmålet: er den ukjente et areal, eller er den en funksjon av tiden?

Kjør-på-nytt-testen som standardgrep

Vanen med å alltid kjøre en simulering to ganger — én gang med den valgte steglengden og én gang med halvparten — før man rapporterer et tall.

Testen gir tre opplysninger i én kjøring: om dtdt er liten nok, om et avvik er en metodefeil eller en modellfeil, og hvor mange gjeldende siffer svaret faktisk fortjener.

Er de to kjøringene like til tre siffer, kan du oppgi tre siffer. Skiller de seg i andre siffer, kan du ikke oppgi mer enn ett — og det er en ærligere rapportering enn å skrive av alle desimalene maskinen tilbyr.

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.