"Godhet utan vishet och utan
gränser är bara en annan
form av ondska."
(John Paterson)

"Det är synd att 99% av
journalisterna skall fördärva
förtroendet för en hel yrkeskår"
(Okänd)

"Ormar äro älskliga varelser,
om man råkar tillhöra samma
giftgrupp"
(Artur Lundkvist)

"När försiktigheten finns överallt,
finns modet ingenstans."
(den belgiske kardinalen Mercier)

"Den som gifter sig med
tidsandan blir snabbt änka."
(Goethe)

"Civiliserade är de kulturer
och individer som respekterar
andra."
(Hört på Axesskanalen)

"Det tragiska med vanligt
sunt förnuft är att det
inte är så vanligt."
(Albert Einstein)

"Halv kristendom tolereras
men föraktas.
Hel kristendom respekteras
men förföljs."
(Okänd)

Senast ändrad: 2024 02 29 13:30

Numerisk problemlösning

(Note: at the top of the page you can choose translation of this article to other languages, but don't expect the translation to be perfect — "Välj språk" means "Choose language")

 

Låt mig med ett enkelt exempel illustrera detta med numeriska metoder och iterationer. Antag att vi vill beräkna √2 (dvs kvadratroten av 2), vilket är liktydigt med att lösa andragradsekvationen x2-2=0. Denna ekvation går lätt att lösa exakt och lösningarna är ±√2 (en andragradsekvation har alltid 2 lösningar — en normal högstadieelev klarar av att lösa ekvationer av denna typ). Problemet är att √2 bara utgör en symbol, som visserligen uttrycker roten av 2 exakt, men som vi inte har någon nytta av vid beräkningar. För att kunna använda roten av 2 i praktiska beräkningar måste man ha ett siffervärde (med tillräckligt antal värdesiffror för de beräkningar man avser att göra). Hur skall vi då beräkna detta siffervärde? Ja, det finns många metoder, men här tänkte jag visa hur man kan göra det genom numeriska metoder.

Vi använder följande iterationsformel, som löser ekvationen x2-2=0:

Jag har här använt en metod som kallas Newton-Raphsons metod (den finns beskriven i grundläggande texter om numeriska metoder, läs t ex på Wikipedia).

Principen vid ekvationslösning medelst numeriska metoder är att man tar fram en iterationsformel för ekvationen i fråga (ofta finns många möjliga sätt att iterera en viss ekvation) som löser problemet (som formel (1) ovan) och sedan väljer ett lämpligt startvärde (x0), som sätts in i formeln. Man kan t ex gissa ett startvärde (exempelvis så kan man i vårt fall pröva sig fram genom att testa vilka tal som har en kvadrat som ligger nära 2 — per definition gäller att (√2)2=2).

Om vi testar lite olika värden, finner vi att 1,42=1,96 och 1,52=2,25, dvs √2 måste ligga mellan 1,4 och 1,5. Genom att testa olika värden kan man på så sätt "ringa in" √2 och få så många värdesiffror som man vill ha. Iterationsmetoder automatiserar denna process och kan lätt implementeras på datorer.

Ibland måste man välja ett startvärde som ligger nära det korrekta värdet (lösningen). Väljer man ett startvärde som ligger alltför långt ifrån lösningen kanske iterationerna inte konvergerar mot lösningen utan t ex går mot oändligheten. Många ekvationer har flera lösningar (en andragradsekvation har alltid två lösningar, en tredjegradsekvation alltid tre etc) och beroende på vilket startvärde man väljer, så hamnar man på någon av dessa (oftast den lösning som ligger närmast startvärdet).

Låt oss t ex sätta x0=5 (vi inser att detta ligger långt ifrån det sökta värdet, eftersom 52=25 och inte 2). Jag väljer avsiktligt ett värde långt från det korrekta värdet för att illustrera att vi ändå snabbt går mot lösningen. Vi får då att x1 blir:

Vi närmar oss således √2 (som är ca 1,4). x1=2,7 sätts nu in i formel (1) och vi erhåller:

Vi har kommit ännu närmare lösningen och har redan en korrekt värdesiffra. Talet x2=1,72037037037 sätts nu in i formel (1) etc och vi får:

x3=1,44145536818 (2 korrekta värdesiffror)
x4=1,41447098137 (4 korrekta värdesiffror)
x5=1,41421358580 (8 korrekta värdesiffror)
x6=1,41421356237 (12 korrekta värdesiffror)

Det korrekta värdet för √2 är enligt min räknedosa 1,41421356237. Vi har således fått √2 med (minst) 12 korrekta värdesiffror (min räknedosa ger bara maximalt 12 värdesiffror) redan efter 6 iterationer. Ibland konvergerar den här typen av problem väldigt snabbt (som i detta fall), medan man i andra fall kan få köra tusentals eller fler iterationer innan man får 12 värdesiffror.

Hade vi i stället valt startvärdet x0=-5 hade iterationerna konvergerat mot ekvationens andra lösning, -√2≈-1,41421356237.

Ovanstående utgör en enkel illustration som kanske hjälper (den intresserade) läsaren att förstå hur numeriska metoder fungerar. Genom att iterera tillräckligt många gånger, kan man i princip få hur stor noggrannhet som helst på svaret. I fallet ovan löste vi en ekvation. Vi valde då ett startvärde som låg relativt nära det korrekta värdet. Vid klimatsimuleringar och liknande så gör man beräkningar utifrån kända fysikaliska samband. Här handlar det för det första inte om ett enda startvärde utan mängder av startvärden (i de punkter där man vill göra sina simuleringar). Och här gissar man givetvis inte startvärdena, utan använder kända mätvärden. Och utifrån dessa värden kan man sedan stega sig framåt i tiden och få en uppfattning om hur t ex temperaturen kommer att förändras under de närmaste 100 åren (under förutsättning att den modell man använder avspeglar verkligheten tillräckligt väl).

Iterationsprocesser kan göras för hand (som ovan). Men normalt kör man iterationen på en dator. Det är lätt att skriva ett kort program (det finns mängder av färdiga sådana) som utför ovanstående och som sedan stoppar och presenterar lösningen när man fått önskat antal värdesiffror. Iterationen ovan gick snabbt och skulle man köra den på en vanlig hemdator eller smartphone, så har man lösningen på skärmen innan enterknappen har hunnit fjädra upp efter att den tryckts ned. Dvs det går blixtsnabbt. Komplicerade problem kan dock kräva betydligt mer beräkningstid, t o m timmar eller dagar på en superdator (se handelsresandeproblemet i huvudartikeln).

Iterationsprocesser innebär sammanfattningsvis att man utgår från ett startvärde, vilket man sätter in i iterationsformeln. Man erhåller då ett nytt värde, vilket man sätter in i formeln. Och så upprepas detta, igen och igen och igen. För varje iteration, om det hela fungerar, så närmar man sig det korrekta värdet alltmer och genom att hålla på tillräckligt länge får man så många korrekta siffror som man önskar.

Tillbaka till artikeln "Allt är inte glamour när det gäller ekvationslösning och simulering."

© Krister Renard