7.2 Butcher-tabeller og ordensbetingelser
Les en Runge–Kutta-metode fra en Butcher-tabell (eller Python-kode) og verifiser ordenen rad for rad til én betingelse feiler.
Frekvens: 5 av 13 gjennomgåtte sett (38 %). Formen er svært stabil:
1. En metode presenteres — enten som en Butcher-tabell, eller som en kort Python-funksjon du må lese tabellen ut av.
2. Du skal bestemme ordenen ved å sjekke ordensbetingelsene i tur og orden.
Dette er en toppsjikt-markør. Grunnen er at prosedyren har én fallgruve, og den er dødelig: du må sjekke betingelsene rad for rad til den første feiler. Stopper du tidligere, påstår du for høy orden. Og på nivå 3 er det to betingelser som begge må holde — går den ene gjennom, betyr det ingenting hvis den andre svikter.
Det er nettopp det som skjer i det gjennomregnede eksempelet i løkke 3: en metode som ser ut som en velkjent tredjeordens metode, men der én oppføring i tabellen er endret, får (riktig) og (galt). Ordenen er 2, ikke 3 — og en besvarelse som stoppet etter den første av dem, svarer feil.
Formelark-merking.
- Står på det utdelte formelarket — tren oppslaget: ordensbetingelsene for til har vært vedlagt siden 2022. Du skal altså ikke pugge dem — du skal finne riktig linje og sette inn riktige tall. Metodeformlene fra kap. 7.1 står også der.
- Må kunnes eller utledes aktivt: å lese en Butcher-tabell (hvilket tall er , hvilket er , hvilket er ), å lese den ut av Python-kode, og selve verifikasjonslogikken — inkludert at du må fortsette til noe faktisk feiler.
Tidsbruk: 60 minutter lesetid, fire løkker. Naturlig pausepunkt etter løkke 2.
Du trenger å kunne regne med brøker og doble summer. Ingen ny matematikk innføres her; det er organiseringen som er nytt.
Kapitlet er forutsetning for kap. 7.3, der en tabell får to -rader, og for kap. 7.4, der stabilitetsfunksjonen leses ut av den samme tabellen.
Én tabell, alle metodene
Du har nå regnet Euler, Heun og RK4 for hånd. Se på dem igjen:
Alt som skiller dem, er tre sett tall: hvor langt ut i tid hvert stigningstall regnes, hvor mye av de foregående stigningstallene som brukes i -argumentet, og hvilke vekter de får til slutt.
Butcher-tabellen samler nøyaktig de tre tallsettene. Den ser slik ut:
Og når metoden er skrevet slik, blir et vanskelig spørsmål — «hvilken orden har denne metoden?» — til en mekanisk sjekkliste. Det er ordensbetingelsene, og de står på det utdelte formelarket.
Hverdagsbildet: tabellen er en oppskrift. sier når du skal smake, sier hvor mye av hver tidligere smaksprøve som skal med i neste, og sier hvordan alt til slutt blandes. To kokker med samme oppskrift lager samme rett — og oppskriften alene forteller deg hvor god retten blir.
Og det siste er det viktige: du trenger ikke kjøre metoden for å finne ordenen. Du leser den av tabellen.
Løkke 1 — Å lese tabellen (~15 min)
Les den nedenfra: sluttsvaret er pluss ganger en vektet sum av stigningstallene. Hvert stigningstall regnes i et eget punkt, forskjøvet i tid og i verdi.
Tallet kalles stegtallet. Euler har , Heun , RK4 . Ikke forveksle det med ordenen — de er ulike, og forholdet mellom dem er tema i løkke 4.
Slik leser du den:
- Venstre kolonne (): tidsforskyvningen for stigningstall nummer .
- Blokken i midten (): hvor mye av som går inn i -argumentet til .
- Nederste rad (): sluttvektene.
Rad i tabellen hører til stigningstall nummer . Kolonne hører til . Å bytte om rad og kolonne i er en dokumentert feilkilde.
Tabellformen må kunnes — den står som notasjon på det utdelte formelarket, men det er avlesningen som er ferdigheten.
Alltid er for en eksplisitt metode: det første stigningstallet regnes i startpunktet.
For RK4 er — start, to på midten, og ett i sluttpunktet. Sammenlikn med hvordan du faktisk regnet i kap. 7.1: og ble regnet i . Det er nøyaktig det forteller.
Kravet er den første ordensbetingelsen, og det er også en gratis kontroll på at du har skrevet av tabellen riktig. Er konstant, blir alle like, og da må — det tvinger fram .
Kontroller alltid vektsummen først. Er den ikke 1, har metoden ikke engang orden 1, og noe er galt med avskriften.
For RK4 er
Les rad 3: og resten null, altså ✔ — akkurat slik du regnet i kap. 7.1.
Merk nullene over diagonalen. De er det som gjør metoden eksplisitt.
Da kan regnes først, deretter (som bare bruker ), deretter , og så videre — alt uten å løse noe.
Implisitt metode: minst ett tall på eller over diagonalen er ulik null. Da står på begge sider av sin egen definisjon, og du må løse en likning — akkurat som for bakover-Euler i kap. 7.1.
Bakover-Euler som Butcher-tabell:
Ett steg, med på diagonalen. Ett blikk på tabellen forteller deg altså om metoden er eksplisitt eller ikke — se etter tall på eller over diagonalen.
Hvorfor: stigningstallet skal svare til punktet på løsningskurven, og da må -forskyvningen stemme med tidsforskyvningen til første orden.
Bruk den som avskriftskontroll. For RK4: rad 2 gir ✔, rad 3 gir ✔, rad 4 gir ✔.
⚠ Men merk hva den IKKE er: radsum-betingelsen er nødvendig, ikke tilstrekkelig for høy orden. En tabell kan oppfylle den perfekt og likevel bare ha orden 2. Det er nøyaktig fella i eksempel 3 — så ikke bruk den som argument for at ordenen er høy.
Skriv opp Butcher-tabellene for eksplisitt Euler, Heun og klassisk RK4, og les dem tilbake til formlene fra kap. 7.1.
Les den: gir , og gir ✔.
Heun (forbedret Euler). To steg:
Les den rad for rad:
- Rad 1: , ingen -er .
- Rad 2: og .
- Vektrad: ✔
Klassisk RK4. Fire steg:
Les den:
- Rad 2: ✔
- Rad 3: ✔ — merk at det er , ikke , fordi ettallet står i kolonne 2.
- Rad 4: ✔
- Vektrad: ✔
Tre kontroller på alle tre tabellene:
1. Vektsummen er 1. Euler: . Heun: . RK4: ✔
2. Radsummene stemmer med . RK4 rad 3: ✔
3. er strengt nedre triangulær, så alle tre er eksplisitte ✔
Poenget med eksempelet. Tabellen inneholder nøyaktig den samme informasjonen som formlene — hverken mer eller mindre. Har du en tabell, kan du regne et skritt; har du et skritt, kan du skrive tabellen. Det er den ferdigheten oppgavene tester.
a) Skriv opp og .
b) Skriv opp formelen for .
c) Hva heter denne metoden?
Kontroller vektsummen og radsummene.
Løkke 2 — Ordensbetingelsene (~16 min)
Nå til det tabellen egentlig er til for: å avgjøre ordenen uten å kjøre metoden.
Innhold: metoden må være konsistent — den må treffe eksakt når er konstant. Er summen ikke 1, har metoden ikke engang orden 1, og den konvergerer ikke i det hele tatt.
Dette er alltid det første du sjekker, og det tar tre sekunder.
Betingelsen står på det utdelte formelarket — tren oppslaget.
Innhold: metoden må fange den lineære endringen i riktig. Halvtallet kommer av at — betingelsen er kvadraturbetingelsen for førstegradsledd.
Merk hvilke tall som ganges sammen: vekt ganger node, ledd for ledd, og så summeres. Det er den eneste operasjonen, og den gjentas i alle de høyere betingelsene med ulike potenser.
Betingelsen står på det utdelte formelarket — tren oppslaget.
Begge må holde. Dette er det viktigste punktet i hele kapitlet, og det som skiller besvarelsene.
Den første er kvadraturbetingelsen for andregradsledd — den ligner de foregående og er lett å regne.
Den andre er ny i formen: den er en dobbelt sum over både og , og den involverer . Den fanger at også avhenger av , altså at stigningstallet endrer seg mens du beveger deg.
Slik regner du den doble summen for hånd. Gå gjennom hver rad med , og for hver av dem gjennom hver kolonne med :
For en eksplisitt trestegsmetode har den som regel bare ett eller to ledd ulik null.
Begge betingelsene står på det utdelte formelarket — tren oppslaget på å finne dem begge. At det er to, og ikke én, er det som må kunnes.
Alle fire må holde for at metoden skal ha orden 4.
Mønsteret i antallet: 1 betingelse for orden 1, 2 for orden 2 (den nye pluss den gamle), 4 for orden 3, 8 for orden 4. Antallet vokser raskt — det er derfor høyordens Runge–Kutta-metoder er vanskelige å konstruere.
Den siste betingelsen har en trippel sum. Den er sjelden nødvendig å regne for hånd på eksamen, for hvis metoden feiler tidligere, stopper du der. Men vet du at den finnes, unngår du å påstå orden 4 for tidlig.
Alle fire står på det utdelte formelarket — tren oppslaget.
1. Sjekk . Feiler den, er ordenen 0 — metoden er ikke konsistent.
2. Sjekk . Feiler den, er ordenen 1.
3. Sjekk begge nivå-3-betingelsene. Feiler minst én, er ordenen 2.
4. Sjekk alle fire nivå-4-betingelsene. Feiler minst én, er ordenen 3.
5. Holder alt, er ordenen minst 4.
Regelen: ordenen er nivået under det første som feiler.
⚠ De to dødelige feilene:
- Å stoppe for tidlig. Går den første nivå-3-betingelsen gjennom, er du ikke ferdig med nivå 3. Du må sjekke den andre også.
- Å telle feil til slutt. Feiler en nivå-3-betingelse, er ordenen 2 — ikke 3.
Logikken må kunnes. Formelarket gir deg betingelsene, ikke prosedyren.
Bruk Butcher-tabellen for RK4 fra eksempel 1 og sjekk alle åtte ordensbetingelsene.
Nivå 1.
Nivå 2.
Regn nøye: (to ganger) og , altså
Nivå 3, første betingelse.
Nivå 3, andre betingelse. Gå rad for rad. Bare radene 2, 3 og 4 har -er ulik null:
- :
- :
- :
Metoden har minst orden 3. Videre til nivå 4.
Nivå 4, betingelse 1.
Nivå 4, betingelse 2.
- :
- :
Nivå 4, betingelse 3.
- :
- :
Nivå 4, betingelse 4 (trippel sum). Det eneste leddet med tre ikke-null faktorer er , , :
Alle åtte betingelsene holder.
Merk hvor systematisk regningen er. Hver betingelse er en liten sum over de radene der og de kolonnene der . For en eksplisitt metode er det få ledd, og de fleste er null.
Tidsbruk på eksamen: en oppgave ber sjelden om alle åtte. Ber den om «bestem ordenen», stopper du ved den første som feiler — og for de fleste oppgavemetodene skjer det på nivå 3.
Sjekk betingelsene i tur og orden til én feiler.
Bestem ordenen ved å sjekke betingelsene i tur og orden.
— naturlig pausepunkt (~31 min brukt) —
Du kan lese tabellen og verifisere ordenen. De to siste løkkene er den formen sjangeren faktisk kommer i på de nyere settene: tabellen ligger gjemt i en Python-funksjon, og metoden ser ut som en kjent metode — men er det ikke.
Løkke 3 — Butcher-tabell fra Python-kode (~16 min)
De nyere settene presenterer ikke alltid tabellen. De gir deg koden, og lar deg lese den ut selv.
En Runge–Kutta-implementasjon har alltid samme skjelett:
- Én linje per stigningstall, på formen k_i = f(t + c_i*h, y + h*(...)).
- Én sluttlinje return y + h*(...) med vektene.
Framgangsmåten, i tre steg:
1. Les fra tidsargumentet i hver f-kall. Står det t, er ; står det t + h/2, er .
2. Les fra -argumentet. Tallet som ganges med k_j inne i parentesen etter h*, er .
3. Les fra returlinja, etter at du har ganget faktoren utenfor parentesen inn.
⚠ Vær nøye med faktorer utenfor parentesen. Står det y + h*(k1 + 4*k2 + k3)/6, er vektene — altså , ikke .
⚠ Og vær nøye med hvilket som står hvor. Det er nettopp der de innebygde feilene ligger.
Avlesningen må kunnes — den står ingen steder på formelarket.
| Observert forhold | Orden |
|---|---|
| 1 | |
| 2 | |
| 3 | |
| 4 |
Bruken: har du regnet ordenen fra tabellen, er dette en helt uavhengig bekreftelse. Er de to uenige, har du regnefeil et sted.
Merk at forholdet nærmer seg nedenfra når minker — resultatet er asymptotisk. Ser du , , , er ordenen 2.
En metode er gitt ved denne Python-funksjonen:
import numpy as np
def steg(f, t, y, h):
k1 = f(t, y)
k2 = f(t + h/2, y + h*0.5*k1)
k3 = f(t + h, y + h*(0.0*k1 + 1.0*k2))
return y + h*(k1 + 4*k2 + k3)/6a) Skriv opp Butcher-tabellen.
b) Bestem ordenen.
c) Metoden ser ut som en kjent tredjeordens metode. Hva er endret, og hva blir konsekvensen?
Nodene fra tidsargumentene: f(t, y) gir ; f(t + h/2, ...) gir ; f(t + h, ...) gir .
Koeffisientene fra -argumentene:
- k2: y + h*0.5*k1 gir .
- k3: y + h*(0.0*k1 + 1.0*k2) gir og .
Vektene fra returlinja: h*(k1 + 4*k2 + k3)/6 gir , , .
Kontroller: vektsum ✔. Radsummer: ✔ og ✔. Strengt nedre triangulær ✔.
Alt ser riktig ut så langt. Det er nettopp det som gjør oppgaven vanskelig.
b) Ordenen.
Nivå 1: ✔
Nivå 2:
Nivå 3, første betingelse:
Her ville en forhastet besvarelse stoppet og svart «orden 3». Men vi er ikke ferdige med nivå 3.
Nivå 3, andre betingelse:
- :
- :
Kravet er , og
c) Hva er endret. Den klassiske Kuttas tredjeordens metode har samme og samme , men tredje rad i er
i stedet for og . Legg merke til at begge tabellene har radsum i rad 3 ( og ) — så radsum-kontrollen avslører ingenting.
Med de riktige tallene blir den andre nivå-3-betingelsen
altså riktig, og metoden har orden 3.
Konsekvensen i tall. Kjører vi begge metodene på , , fram til (eksakt ), får vi
| Feil, koden over | forhold | Feil, Kuttas RK3 | forhold | |
|---|---|---|---|---|
| 10 | — | — | ||
| 20 | ||||
| 40 | ||||
| 80 |
Forholdet 4 mot 8 bekrefter orden 2 mot orden 3, helt uavhengig av tabellregningen.
Lærdommen. Én oppføring i er endret, radsummen stemmer fortsatt, den første nivå-3-betingelsen holder fortsatt — og likevel har metoden mistet en hel orden. Det er derfor du må sjekke begge betingelsene på nivå 3, og det er nøyaktig denne fella sjangeren er bygd rundt.
Les Butcher-tabellen ut av denne funksjonen, og bestem ordenen:
def steg(f, t, y, h):
k1 = f(t, y)
k2 = f(t + h, y + h*k1)
return y + h*(k1 + k2)/2Samme oppgave for
def steg(f, t, y, h):
k1 = f(t, y)
k2 = f(t + h/3, y + h*k1/3)
k3 = f(t + 2*h/3, y + 2*h*k2/3)
return y + h*(k1 + 3*k3)/4a) Skriv opp tabellen.
b) Bestem ordenen.
Løkke 4 — Stegtall mot orden, og en full eksamensoppgave (~13 min)
Du kan ikke få høyere orden enn antall stigningstall. Og for blir det verre:
| Stegtall | Høyest mulige orden |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 4 |
| 6 | 5 |
| 7 | 6 |
Merk raden . Fem stigningstall gir ikke orden 5 — det er en kjent barriere. Det er nettopp derfor RK4 er så utbredt: den er den siste metoden der orden og stegtall er like, altså det siste «gratis» punktet før prisen stiger.
Bruken på eksamen: har en firestegs metode fire stigningstall, kan ordenen ikke være 5. Er du kommet til orden 4 og alle betingelsene holder, er du ferdig — du trenger ikke sjekke nivå 5.
| Orden | Antall nye betingelser | Totalt |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 4 |
| 4 | 4 | 8 |
| 5 | 9 | 17 |
Antallet eksploderer. Det er derfor det finnes få praktiske metoder over orden 8, og det er også derfor formelarket stopper ved .
Praktisk konsekvens: på eksamen ser du aldri en verifikasjon over nivå 4. Metoden i oppgaven har typisk orden 2 eller 3, og hele poenget er at du finner den første betingelsen som feiler.
Betrakt det enkleste tilfellet, der bare avhenger av . Da er
og metoden tilnærmer dette med — altså en kvadraturformel med noder og vekter på intervallet .
Kravet om eksakthet for gir
Der har du , , og — de er nøyaktig for .
Betingelsene som involverer har ingen slik enkel kvadraturtolkning; de kommer av at også avhenger av , og at stigningstallet derfor endrer seg underveis. Det er de betingelsene som er nye, og det er dem som feiler i oppgavemetodene.
Sammenhengen med kap. 6.2 er direkte: ordensbetingelsene av typen er presisjonsgrad-testen, flyttet til intervallet .
Seks sjekker, i rekkefølge:
1. Vektsum ? Hvis ikke, er noe skrevet av feil.
2. Radsummer ? Avskriftskontroll — men ikke et argument for høy orden.
3. Er strengt nedre triangulær? Da er metoden eksplisitt.
4. Gå nivå for nivå, og skriv ut hver sum med tallene synlige.
5. Sjekk ALLE betingelsene på hvert nivå før du går videre.
6. Konkluder med nivået UNDER det første som feilet.
Skriv ut hver sum med tall. « ✔» viser tenkemåten; « ✔» gjør det ikke.
En kollega har implementert en ODE-løser:
import numpy as np
def steg(f, t, y, h):
k1 = f(t, y)
k2 = f(t + h/2, y + h*k1/2)
k3 = f(t + h, y + h*(2.0*k2 - k1))
return y + h*(k1 + 4*k2 + k3)/6a) Skriv opp Butcher-tabellen og kontroller den.
b) Bestem ordenen ved å sjekke betingelsene i tur og orden.
c) Beskriv et numerisk eksperiment som bekrefter svaret, og si hvilket resultat du forventer.
- k1 = f(t, y): .
- k2 = f(t + h/2, y + h*k1/2): , .
- k3 = f(t + h, y + h*(2.0*k2 - k1)): , og parentesen gir , .
- Returlinja h*(k1 + 4*k2 + k3)/6: , , .
Kontroller.
- Vektsum: ✔
- Radsummer: rad 2: ✔. Rad 3: ✔
- Eksplisitt: er strengt nedre triangulær ✔
Merk det negative tallet . Negative koeffisienter er helt vanlige i Runge–Kutta-tabeller og er ikke et tegn på feil.
b) Ordenen.
Nivå 1: ✔
Nivå 2:
Nivå 3, første betingelse:
Nivå 3, andre betingelse:
- :
- :
Begge nivå-3-betingelsene holder — metoden har minst orden 3. Videre til nivå 4.
Nivå 4, første betingelse:
Overraskende — den gikk gjennom. Vi må videre.
Nivå 4, andre betingelse:
- :
- :
Kravet er , og
Dette er Kuttas tredjeordens metode, den korrekte utgaven av metoden i eksempel 3.
Merk at nivå 4 krevde to forsøk. Den første betingelsen på nivå 4 gikk gjennom — helt tilfeldig — og hadde vi stoppet der, ville vi påstått orden 4. Regelen om å sjekke alle betingelsene på hvert nivå gjelder også på nivå 4.
c) Numerisk eksperiment.
Oppsett: velg et problem med kjent løsning, for eksempel med , som har
Kjør metoden fra til med skritt, altså med halvert hver gang, og regn feilen .
Forventet resultat: forholdet mellom to påfølgende feil skal nærme seg
Faktisk resultat når eksperimentet kjøres:
| Feil | Forhold | ||
|---|---|---|---|
| 10 | — | ||
| 20 | |||
| 40 | |||
| 80 |
Forholdet nærmer seg 8 nedenfra ✔ — eksperimentet bekrefter orden 3, uavhengig av tabellregningen.
Hvorfor eksperimentet er verdt å beskrive. Ordensbetingelsene er lette å regne feil i, særlig de doble summene. Et eksperiment som gir forhold 8 når du har regnet deg fram til orden 3, er en sterk bekreftelse. Gir det 4 når du har regnet 3, vet du at du har en feil å lete etter.
Tidsbruk på eksamen: a) 5 min, b) 12 min, c) 5 min — omtrent 22 minutter for en oppgave på 10 poeng.
med .
a) Hvilken betingelse må og oppfylle for at metoden skal ha orden 2?
b) Vis at ingen slik metode kan ha orden 3.
c) Hvilke kjente metoder svarer til og til ?
En student har prøvd å implementere klassisk RK4, men et konvergenseksperiment viser forholdet mellom feilene i stedet for :
def steg(f, t, y, h):
k1 = f(t, y)
k2 = f(t + h/2, y + h*k1/2)
k3 = f(t + h/2, y + h*k1/2)
k4 = f(t + h, y + h*k3)
return y + h*(k1 + 2*k2 + 2*k3 + k4)/6a) Skriv opp tabellen koden faktisk implementerer.
b) Finn linja med feilen, og forklar hvorfor symptomet blir en tapt orden.
c) Verifiser ordenen fra tabellen.
2. Å telle feil til slutt. Feiler en nivå-3-betingelse, er ordenen 2. Å skrive «orden 3 fordi den feilet på nivå 3» er den klassiske tellefeilen.
3. Å feillese fra koden. Se etter hvilket k som står inne i -argumentet. y + h*k1/2 gir ; y + h*k2/2 gir . Én siffers forskjell, en hel orden i konsekvens.
4. Å glemme faktoren utenfor parentesen i returlinja. h*(k1 + 4*k2 + k3)/6 gir vektene — ikke . Vektsum-kontrollen fanger dette.
5. Å forveksle og . Nodene står i venstre kolonne og gir tidsforskyvningen; vektene står i nederste rad og gir blandingen. De brukes i ulike posisjoner i hver eneste ordensbetingelse.
6. Å bruke radsum-betingelsen som argument for høy orden. Den er nødvendig, ikke tilstrekkelig. Metoden i eksempel 3 oppfyller den perfekt og har likevel bare orden 2.
7. Å transponere . Rad hører til stigningstall ; kolonne hører til . En transponering gir en helt annen metode.
8. Å tro at et konvergenseksperiment erstatter verifikasjonen. Eksperimentet kan gi for høy orden på et spesielt snilt problem. Det bekrefter; det beviser ikke.
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 Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.