8.4 Randverdiproblemer, falsk rand og kodefeil-lokalisering
Sett opp $A\mathbf U=\mathbf b$ for et randverdiproblem, håndter Neumann-rand med falsk node, og finn den innebygde feilen i en gitt Python-kode.
To underspørsmål har eget belegg, og begge er toppsjikt-markører:
- Randverdiproblem med falsk rand: 2 av 13 sett (15 %). Du diskretiserer , setter opp , og håndterer en Neumann-betingelse med en fiktiv node utenfor intervallet.
- Kodefeil-lokalisering: 2 av 13 sett (15 %). Du får et kort Python-program med én innebygd feil, ser at randbetingelsen ikke er oppfylt, og peker på den linja som er skyld i det.
Hver for seg er de ikke veldig hyppige. Samlet er de en fast del av P-blokken, og de er billige å score på når du har gjort dem én gang — særlig kodefeilen, som er ren logikk uten tung regning.
Formelark-merking.
- Differansekvotientene står på det utdelte formelarket — tren oppslaget. Det gjelder både sentraldifferansen for og den andre sentraldifferansen for ; begge trengs her.
- Systemoppsettet, elimineringen av den falske noden og feilsøkingslogikken må kunnes. Formelarket har ingenting om noen av delene.
En notasjonsavklaring før vi begynner. Randverdiproblemet skrives ofte i lærebøker. Denne boka bruker for høyresiden, fordi i hele Del 8 er stabilitetstallet . Ser du en i en oppgavetekst, er det høyresiden — ikke stabilitetstallet.
Tidsbruk: 60 minutter lesetid, fire løkker à omtrent et kvarter. Naturlig pausepunkt etter løkke 2.
Sist du var her. De tre tingene du bruker i hver eneste oppgave under:
Den andre sentraldifferansen. Står på det utdelte formelarket — tren oppslaget.
Den sentrale førstederiverte, orden . Det er denne som brukes i randpunktet og som gjør at den falske noden i det hele tatt dukker opp.
Halveringstesten fra kap. 8.1. I løkke 4 brukes den som feilsøkingsverktøy: et skjema med en feil i randraden konvergerer ikke, og det ser du med to kjøringer.
Fra tidligere matematikkemner trengs å kunne løse et lite lineært system, og å lese enkel Python-kode med numpy. Du skal aldri skrive et program i denne boka — bare lese og feilsøke.
To slags problemer, to helt ulike løsningsmåter
Fram til nå har alt i Del 8 marsjert framover i tid: du kjenner starten, og du regner deg oppover rad for rad. Det kalles et initialverdiproblem.
Et randverdiproblem er noe annet. Der er betingelsene gitt i begge ender av intervallet, og det finnes ingen retning å marsjere i. En stang som holdes på 20 grader i den ene enden og er isolert i den andre — hva er temperaturen i midten når alt har roet seg? Du kan ikke starte i venstre ende og gå mot høyre, for du vet ikke hva stigningen skal være der.
Derfor må alle punktene finnes samtidig. Én likning per indre punkt, alle koblet til naboene sine, samlet i ett lineært system . Det er samme tridiagonale form som i kap. 8.3, men nå kommer den ikke av et tidssteg — den kommer av selve problemet.
Så kommer den lille komplikasjonen som gir kapitlet navn. Er randbetingelsen av typen «temperaturen er grader», setter du bare inn tallet. Men er den «enden er isolert», altså , må du bruke en differansekvotient i randpunktet — og sentraldifferansen der peker på et punkt som ligger utenfor intervallet. Det punktet finnes ikke. Trikset er å late som det gjør, og deretter eliminere det. Den fiktive verdien kalles en falsk node.
Og til slutt en sjanger som er helt egen for dette emnet: du får et kort program som løser et slikt problem, det gir feil svar, og du skal finne den ene linja som er skyld i det. Det er ikke et programmeringspensum — det er en test på om du forstår hvor randbetingelsen bor i koden.
Kapitlet gjør fire ting: setter opp systemet med Dirichlet-rand, innfører den falske noden, viser hvorfor den er verdt bryet, og går gjennom kodefeil-lokalisering med en oppskrift som virker.
Løkke 1 — Fra differensiallikning til likningssystem (~15 min)
Vi begynner med det enkleste tilfellet: verdien er gitt i begge ender. Da er hele jobben å skrive én likning per indre punkt og samle dem.
med én betingelse i og én i .
Kontrast til et initialverdiproblem, der begge betingelsene er gitt i samme punkt ( og ). Der kan du marsjere framover ett skritt om gangen, slik Del 7 gjør med Euler og Runge–Kutta. I et randverdiproblem finnes ingen slik retning: alle verdiene bestemmer hverandre gjensidig.
Merk bokstavene. Mange lærebøker skriver høyresiden som . Her heter den , siden i Del 8 er stabilitetstallet fra kap. 8.2. Innholdet er det samme.
Ganger du opp med , ser strukturen slik ut:
Dette er én likning per indre punkt, med tre ukjente hver — og med bare naboene involvert. Samlet blir det et tridiagonalt system.
Formen er verdt å legge merke til: koeffisienten på begge naboene, og hele likningens egenart samlet i diagonalleddet . Er konstant, er diagonalen den samme i alle radene.
De to siste trekkene er de som glemmes. I første likning står , som er kjent — den flyttes over til høyresiden med motsatt fortegn. Det samme med i siste likning.
Er randverdiene null, faller begge bort, og alle radene ser like ut. Det er derfor eksamensoppgaver ofte har .
En Dirichlet-betingelse gir verdien direkte: , altså .
Behandlingen er den enkleste som finnes: er ikke en ukjent, den er et tall. Den fjernes fra ukjentvektoren, og bidraget fra første likning flyttes over til høyresiden.
Systemet får dermed ukjente ved to Dirichlet-render, og alle radene er «vanlige» radene fra diskretiseringen.
Navnet er verdt å kunne: Dirichlet-rand er «verdien er gitt», Neumann-rand er «den deriverte er gitt». Begge navn brukes i oppgavetekstene, og begge er innført i kap. 5.1.
med . Sett opp , løs, og sammenlign med den eksakte løsningen.
De ukjente er og . Randverdiene er .
Steg 2 — diskretiser. Fra formelarket: . Sett inn i likningen:
Med blir venstre side . Del alt på 9:
Pent. Med akkurat dette -et og denne -en blir alle koeffisientene hele tall.
Steg 3 — skriv likningene.
: . Med :
: . Med :
Steg 4 — systemet.
Steg 5 — løs. Fra første likning: . Sett inn i den andre:
Kontroll: . ✓
Steg 6 — sammenlign med fasiten. Den eksakte løsningen finnes: homogen del , partikulær (sett inn: ✓). Randbetingelsene gir og , altså
Avvikene er og . Med bare to indre punkter er det bra.
Steg 7 — kontroller ordenen. Skjemaet skal være , så feilen skal deles på 4 når halveres. Kjørt for blir største feil
med forholdene , og — på vei mot 4. ✓ Andre orden bekreftet.
Denne konvergenskontrollen er verdt å nevne i besvarelsen, og i løkke 4 blir den selve feilsøkingsverktøyet.
(Innstegsoppgave — ren innsetting.) Diskretiser på med , og .
a) Hvor mange ukjente er det?
b) Skriv opp likningen for det indre punktet.
c) Løs den.
med .
a) Sett opp .
b) Løs systemet.
Løkke 2 — Neumann-rand og den falske noden (~16 min)
Nå kommer kapitlets kjerne. Hva gjør du når randbetingelsen ikke gir en verdi, men en stigning?
Det vanligste tilfellet på eksamen er , som fysisk betyr en isolert ende: ingen varme slipper ut.
To ting endrer seg i forhold til Dirichlet:
1. Randverdien er nå en ukjent. Systemet får én ekstra ukjent og én ekstra rad.
2. Den ekstra raden må komme fra randbetingelsen — og det er der den falske noden dukker opp.
Neumann-betingelsen er innført i kap. 5.1, der den ga cosinus-egenfunksjoner i stedet for sinus.
Hvorfor det trengs: vi vil bruke sentraldifferansen i randpunktet, fordi den er :
Den peker på , som ligger utenfor. Vi later som punktet finnes, bruker det i to likninger, og eliminerer det.
Det er ikke juks. Den falske verdien opptrer bare som et mellomledd og forsvinner igjen. Ingen påstand om hva er utenfor intervallet blir stående.
Kalles også fiktiv node eller spøkelsespunkt (ghost point).
Steg 1 — randbetingelsen med sentraldifferanse:
Den falske verdien er altså speilbildet av naboen på innsiden.
Steg 2 — bruk differensiallikningen også i randpunktet. Likningen gjelder helt ut til randen, så vi skriver den for :
Steg 3 — sett inn fra steg 1. Erstatt med :
Her er hele poenget: koeffisienten foran ble , ikke . De to naboverdiene falt sammen til én, og bidragene la seg oppå hverandre.
Å glemme den faktoren 2 er den enkeltfeilen som er dokumentert i løsningsforslagene — og den er også kodefeilen du skal lete etter i løkke 4. Skriv og understrek den.
Intuisjon: betingelsen sier at kurven er flat i randen. Da er verdien på utsiden lik verdien på innsiden — profilen speiler seg om randpunktet. Tegn det, og faktoren 2 blir opplagt.
Er , gir samme regning , og randraden blir
Det ekstra leddet flyttes over til høyresiden.
(Innstegsoppgave — ren opptelling.) Et randverdiproblem på diskretiseres med delintervall.
a) Hvor mange ukjente er det når begge randbetingelsene er av Dirichlet-type?
b) Hvor mange er det når venstre rand er Dirichlet og høyre rand er Neumann?
c) Hvilke gitterpunkter trenger en falsk node i tilfellet i b), og hvor ligger den?
med . Sett opp med falsk node ved høyre rand, løs, og sammenlign med den eksakte løsningen.
er kjent (Dirichlet). er ukjent, fordi høyre rand bare gir stigningen. De ukjente er altså — fire stykker.
Steg 2 — diskretiser likningen. Fra formelarket:
Med blir venstre side . Del alt på 16:
Steg 3 — de indre likningene ().
, med :
:
:
Steg 4 — randraden med falsk node (). Skriv samme likning i randpunktet:
Randbetingelsen med sentraldifferanse:
Sett inn:
Faktoren 2 foran er hele poenget. Skriver du der, løser du et helt annet problem — som du skal se i løkke 3 og 4.
Steg 5 — systemet.
Legg merke til at matrisen ikke lenger er symmetrisk — den siste raden har 2 der de andre har 1. Det er normalt for falsk-rand-behandlingen og er ikke en feil.
Steg 6 — løs. Ved eliminasjon:
Kontroll i randraden: . ✓
Kontroll i rad 2: . Med felles nevner 188: . ✓
Steg 7 — sammenlign med fasiten. Eksakt: partikulær (sett inn: ✓), homogen . Fra : . Fra : , altså :
| numerisk | eksakt | avvik | |
|---|---|---|---|
| 0,25 | |||
| 0,50 | |||
| 0,75 | |||
| 1,00 |
Merk at feilen er størst i randpunktet. Det er typisk: randraden er den eneste som er behandlet spesielt, og den bærer mest feil. Men den er fortsatt — se løkke 3.
Det som gir uttelling i denne oppgavetypen: (1) at du skriver differensiallikningen også i randpunktet, (2) at du bruker sentraldifferansen — ikke en ensidig — på randbetingelsen, (3) at faktoren 2 kommer riktig ut, og (4) minst én innsettingskontroll. Ren fasit uten disse fire gir ikke full uttelling.
Sett opp randraden med falsk node i hvert tilfelle. Likningen er , gitteret har delintervall, og randbetingelsen gjelder i .
a)
b)
c) Venstre rand i stedet: , med falsk node .
med . Sett opp systemet og løs det.
Løkke 3 — Hvorfor ikke bare bruke en ensidig differanse? (~13 min)
— naturlig pausepunkt —
Et rimelig spørsmål: hvorfor gjøre det så tungvint? Randbetingelsen kunne jo like gjerne skrives
uten noen falsk node i det hele tatt. Svaret er at det ødelegger hele skjemaet, og det er verdt å se hvorfor.
En differanselikning er bare så nøyaktig som sitt svakeste ledd.
- Den andre sentraldifferansen i de indre punktene er .
- Falsk node bruker den sentrale førstederiverte i randpunktet, som også er . Skjemaet forblir andreordens.
- Ensidig differanse i randpunktet er . Den ene raden trekker hele løsningen ned til første orden.
Regelen er generell og verdt å kunne: randbehandlingen må ha minst samme orden som skjemaet inne i området, ellers er den høyere ordenen bortkastet.
Det er hele grunnen til at den falske noden finnes. Den er ikke et pedagogisk påfunn — den er billigste vei til å bevare orden 2.
Løs problemet fra eksempel 2 — , , — for , én gang med falsk node og én gang med den ensidige betingelsen . Sammenlign største feil.
| falsk node | forhold | ensidig | forhold | ||
|---|---|---|---|---|---|
| 4 | 0,2500 | — | — | ||
| 8 | 0,1250 | 3,54 | 2,20 | ||
| 16 | 0,0625 | 3,87 | 2,11 | ||
| 32 | 0,0312 | 3,97 | 2,06 | ||
| 64 | 0,0156 | 3,99 | 2,03 |
Les kolonnene med forhold. Falsk node gir forholdet 4 — feilen deles på fire når halveres, altså orden 2. Den ensidige gir forholdet 2 — bare orden 1.
Se hva det koster i praksis. Ved er feilen med falsk node ; med ensidig rand er den — 65 ganger større. Og forspranget vokser: hver halvering av dobler forholdet mellom de to.
Sagt på en annen måte: for å nå samme nøyaktighet som falsk node gir ved , trenger den ensidige varianten omtrent . Det er en veldig dyr forenkling.
Det ene ekstra trinnet — å skrive likningen i randpunktet og speile den falske noden inn — er altså ikke pynt. Det er forskjellen mellom en andreordens og en førsteordens metode.
Merk også at feilen med ensidig rand ikke er konsentrert nær randen. Den forplanter seg innover, fordi alle likningene er koblet. Én dårlig rad ødelegger for hele løsningen — og det er nettopp derfor kodefeil i randraden er så vanskelige å oppdage ved å se på tallene.
a) Skriv opp randraden som da gir.
b) Hvilken fordel og hvilken ulempe har denne varianten sammenlignet med falsk node?
c) Hvorfor blir matrisen ikke lenger tridiagonal?
Løkke 4 — Å finne den ene linja som er feil (~16 min)
Nå til den sjangeren som er helt egen for dette emnet. Du får et kort program, det gir feil svar, og du skal peke på linja.
Dette er ikke et programmeringspensum. Du skal aldri skrive et program på eksamen. Du skal lese femten linjer og se hvor randbetingelsen bor.
Fire steg, i denne rekkefølgen. De tar til sammen fem minutter.
1. Sjekk om randbetingelsene faktisk er oppfylt i det svaret programmet gir. Er i oppgaven, men i utskriften, ligger feilen i randbehandlingen — ikke i løkka.
2. Sammenlign radene i matrisen med likningene du selv utleder for hånd. Skriv opp én indre rad og randraden på papir, og les dem mot koden. Nesten alle plantede feil ligger i randraden.
3. Forfin gitteret. Halver og se om feilen synker. Gjør den ikke det, er feilen strukturell — en rad som svarer til et annet problem. Er den strukturelle feilen i randraden, kan feilen til og med vokse når du forfiner.
4. Sjekk løkkegrensene. range(1, n) gir . Skal siste indre punkt være med, må grensen være n+1 eller punktet behandles for seg.
Steg 1 er det som løser oppgaven ni ganger av ti, og det er det som er formulert i oppgavetekstene: «se at randbetingelsen ikke er oppfylt, og pek på linja».
og skriver dette programmet. Det gir feil svar. Finn feilen, forklar symptomet, og rett den.
import numpy as np
n = 4 # antall delintervall
h = 1/n
x = np.linspace(0, 1, n+1)
A = np.zeros((n, n)) # ukjente er U_1, ..., U_4
b = np.zeros(n)
for i in range(1, n): # de indre punktene
A[i-1, i-1] = -2/h**2 - 16
if i >= 2:
A[i-1, i-2] = 1/h**2
A[i-1, i] = 1/h**2
b[i-1] = 16*x[i]
A[n-1, n-2] = 1/h**2 # raden for randpunktet x_n
A[n-1, n-1] = -2/h**2 - 16
b[n-1] = 16*x[n]
U = np.linalg.solve(A, b)
print(np.round(U, 6))Utskrift:
[-0.227273 -0.431818 -0.568182 -0.522727]Kurven stiger mot randen, med en stigning på omtrent . Den er ikke i nærheten av flat. Randbetingelsen er brutt, og etter steg 1 i oppskriften ligger feilen dermed i randbehandlingen.
Steg 2 — utled randraden for hånd og les den mot koden. Fra eksempel 2: skriv differensiallikningen i og sett inn fra randbetingelsen:
Koeffisienten foran skal altså være .
I koden står det
A[n-1, n-2] = 1/h**2Det er feilen, og det er én linje. Faktoren 2 mangler. De to naboverdiene og falt sammen til én da den falske noden ble eliminert, og bidragene skulle legges sammen.
Steg 3 — hvorfor symptomet følger av feilen. Raden koden faktisk løser, er
som er den samme som du ville fått av å sette — altså en Dirichlet-betingelse i den falske noden, ikke . Programmet løser et helt annet randverdiproblem: ett der løsningen tvinges mot null like utenfor intervallet. Derfor bøyer kurven oppover mot randen i stedet for å flate ut.
Steg 4 — bekreft med gitterforfining. Kjør det samme programmet for flere og se på randverdien :
| med feilen | rettet | eksakt | |
|---|---|---|---|
| 4 | |||
| 8 | |||
| 16 | |||
| 32 |
Se på venstre kolonne: den går mot null, ikke mot fasiten. Feilen blir verre når gitteret forfines. Det er det sikreste tegnet på en strukturell feil i en randrad — en ren regnefeil ville blitt mindre.
Den rettede kolonnen konvergerer pent mot , med feil som deles på omtrent fire for hver halvering.
Rettelsen er én tegn:
A[n-1, n-2] = 2/h**2Slik formuleres svaret på eksamen, kort og med begge delene med:LinjaA[n-1, n-2] = 1/h**2er feil; den skal være2/h**2. Ved elimineringen av den falske noden legger de to naboleddene seg oppå hverandre, så koeffisienten foran blir . Med koeffisienten løser programmet i stedet problemet med , altså en verdibetingelse i den fiktive noden. Symptomet er at den numeriske løsningen stiger mot høyre rand i stedet for å flate ut, og at feilen vokser når gitteret forfines.
Merk hva som gir uttelling: å peke på linja alene er halve svaret. Den andre halvdelen er å forklare hvorfor symptomet følger av feilen — at randbetingelsen blir en annen enn den oppgaven ba om.
Et program skal ta fem tidssteg med det eksplisitte skjemaet for varmelikningen med , på et symmetrisk startprofil. Det gir dette svaret:
[0. 0.206821 0.326136 0.342679 0.270243 0.142233 0. ]Startprofilen var , og randbetingelsene er kalde ender i begge sider.
a) Hva er galt med svaret, uten å regne noe?
b) Her er løkka. Finn feilen.
for n in range(5):
for i in range(1, len(U)-1):
U[i] = U[i] + r*(U[i+1] - 2*U[i] + U[i-1])c) Hva blir riktig svar?
Et program skal løse varmelikningen på med , og for . Etter 50 tidssteg med og gir det
[0. 0.001071 0.002039 0.002812 0.003313 0.003492 0.003329 0.002838 0.002066 0.001087 0. ]a) Hva forteller svaret deg umiddelbart?
b) Her er tidsløkka. Finn feilen.
for k in range(steg):
Ny = np.zeros_like(U)
Ny[1:-1] = U[1:-1] + r*(U[2:] - 2*U[1:-1] + U[:-2])
U = Nyc) Hva skulle svaret nærmet seg?
Et program løser på med , , og bygger matrisen med denne løkka:
for i in range(1, n):
A[i-1, i-1] = -2/h**2 + 4
if i >= 2:
A[i-1, i-2] = 1/h**2
if i <= n-2:
A[i-1, i] = 1/h**2
b[0] = -1/h**2
b[n-2] = -2/h**2a) Kontroller at diagonalen er riktig.
b) Kontroller randbidragene i b.
c) Programmet gir en løsning som er nær null overalt. Hvor bør du lete?
Å bruke en ensidig differanse på Neumann-betingelsen. er fristende kort, men den er bare og trekker hele løsningen ned til første orden. Feilen blir titalls ganger større, slik eksempel 3 viser. Bruk sentraldifferansen og den falske noden.
Feil matriseoppføring. Kontroller alltid to rader for hånd: én vanlig indre rad og randraden. Nesten alle plantede feil ligger i randraden, fordi det er den eneste som er utledet spesielt.
Å glemme å flytte randverdien over til høyresiden. I første og siste likning står en kjent verdi som må over i — med motsatt fortegn. Å glemme fortegnsbyttet er like vanlig som å glemme leddet helt.
Å lete i selve løkka når randbetingelsen er brutt. Er eller feil i utskriften, ligger feilen i randbehandlingen. Løkka over de indre punktene rører ikke randen. Denne ene erkjennelsen sparer flere minutter på eksamen.
Å peke på linja uten å forklare symptomet. Oppgaven ber om begge deler: hvilken linje, og hvorfor det gale svaret følger av den. Halve poengsummen ligger i forklaringen.
Å tro at et lite tall betyr et lite avvik. I eksempel 4 var svaret mot fasiten — det ser nesten riktig ut. Først når gitteret forfines, ser du at det ikke konvergerer i det hele tatt. Forfin alltid.
Begrepsbank
Flashcard- og repetisjonsstoff — hopp trygt over ved førstegangslesing. Boksene under samler resten av kapitlets begreper som egne kort.
Behandlingen er den samme som for ren Neumann: skriv med sentraldifferanse, løs for den falske verdien
og sett inn i likningen for . Nå havner det ekstra -leddet i diagonalen, ikke bare i høyresiden.
Betingelsen dukker opp i varmeledning mot omgivelser med gitt temperatur («Newtons avkjølingslov»), og prinsippet er identisk: én falsk verdi, én eliminasjon.
Er nær null, er systemet løst riktig. Da er en eventuell feil i oppsettet av systemet, ikke i løsningen av det.
Er stor, er det løseren eller innsettingen som svikter — for eksempel en nær-singulær matrise.
Testen skiller altså mellom to helt ulike feiltyper, og den tar noen sekunder. På eksamen gjør du den ved å sette svaret inn i én eller to av likningene, slik alle eksemplene i dette kapitlet gjør.
Kjør samme program med og med , og sammenlign feilen mot en kjent fasit — eller, mangler fasit, sammenlign de to numeriske svarene med hverandre.
- Feilen deles på fire: skjemaet er andreordens og trolig riktig.
- Feilen deles på to: ordenen er falt til én. Se etter en ensidig differanse et sted, typisk i randraden.
- Feilen synker ikke, eller vokser: skjemaet løser et annet problem. Feilen er strukturell, og den ligger nesten alltid i en rad som er utledet spesielt.
Den siste linja er det kraftigste diagnoseverktøyet i hele Del 8, og den er lett å bruke: to kjøringer og en divisjon.
I kodefeil-oppgavene skal du levere begge deler:
- Symptomet er det du ser i utskriften: en randverdi som er feil, en løsning som ikke er symmetrisk, tall som vokser, en kurve som bøyer feil vei.
- Årsaken er linja i koden.
Og du skal koble dem: vise at nettopp den linja gir nettopp det symptomet, ved å skrive ut hvilket problem koden faktisk løser.
I eksempel 4 var koblingen at koeffisienten svarer til , altså en verdibetingelse i den falske noden i stedet for — og en løsning som tvinges mot null utenfor intervallet, bøyer oppover mot randen. Den setningen er halve poengsummen.
Det diskrete systemet har entydig løsning når er inverterbar. For er det garantert når på hele intervallet: da er matrisen diagonaldominant, akkurat som i kap. 8.3.
Er , kan det gå galt — og det speiler det kontinuerlige problemet. med har uendelig mange løsninger, fordi er en egenverdi, slik du så i kap. 5.1.
Praktisk: står det , eller i oppgaven, er alt i orden. Står det med positivt fortegn, er det verdt en setning om at systemet likevel har entydig løsning for det aktuelle gitteret.
På papiret nummereres gitterpunktene . I koden ligger de ukjente i en vektor som starter på indeks 0.
Er kjent (Dirichlet), er de ukjente , og de ligger i kodens U[0] til U[n-1]. Forskyvningen på én er kilden til halvparten av alle leserfeil.
Kontrollvanen: skriv i margen hvilken papirindeks kodens A[0,0] og A[n-1,n-1] svarer til, før du leser resten. Da ser du med én gang om A[n-1, n-2] er randraden eller 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.