Sammanfattning metoder Ordinära differentialekvationer, del 2 Beräkningsvetenskap II n Eulers metod (Euler framåt, explicit Euler): y i+1 = y i + h i f (t i, y i ) n Euler bakåt (implicit Euler): y i+1 = y i + h i f (t i+1, y i+1 ) n Trapetsmetoden: y i+1 = y i + h i 2 ( f (t i, y i ) + f (t i+1, y i+1 )) Sammanfattning metoder! k 1 = f (t i, y i ) " k 2 = f (t i + h i, y i + h i k 1 ) y i+1 = y i + h i $ 2 (k 1 + k 2 ) n Heuns metod: n Klassisk Runge-Kutta:! k 1 = f (t i, y i ) k 2 = f (t i + h i 2, y i + h i 2 k 1 ) k 3 = f (t i + h i 2, y i + h i " 2 k 2 ) k 4 = f (t i+1, y i + h i k 3 ) y i+1 = y i + h i $ 6 (k 1 + 2k 2 + 2k 3 + k 4 ) Olika metoder påverkas olika mycket av steglängden h Avrundningsfel börjar dominera dominerar detta gör att man för att få en given noggrannhet måste välja olika lång steglängd vilket i sin tur gör att beräkningen tar olika lång tid h tid Ber steg tid/ber steg Euler 0.00016 0.083 62364 0.0000013 Heun 0.042 0.0006 238 0.0000027 Kl R-K 0.37 0.0002 28 0.000006 Trots att varje beräkningssteg tar längre tid för klassisk R-K är den totala beräkningstiden kortare 1
n Vissa problem leder till stabilitetsproblem en gräns för valet av steglängd n Implicita metoder tycks ha bättre stabilitetsegenskaper Explicit Euler Implicit Euler Några frågeställningar n Hur mäter man en metods noggrannhet? n Kan man härleda teoretiska formler? n Hur mäter man en metods stabilitetsegenskaper n S k styva problem ger stabiltetsproblem för explicita metoder. Varför? n Vilken effekt får styva problem i praktiken och hur löser man problemen n kan delas upp i lokalt resp globalt fel Exempel Eulers metod Fel i steg 1 lokalt fel felet som skapats i detta steg (grön kort pil) globalt fel - totalt fel i detta steg (blå lång pil) Fel i steg 2 lokalt fel i steg 3 för litet för att visa grafiskt globalt fel i steg 3 blå lång pil Fel i steg 3 2
lokalt fel i steg 4 grön kort pil globalt fel i steg 4 blå lång pil Fel i steg 4 n (trunkeringsfel) delas alltså in i Globalt fel vid steg k totalt fel i steg k Lokalt fel vid steg k felet skapat i steg k n Diskretiseringssfelet beror på något sätt av steglängden h n Hur det beror av h beror på metod och kallas för metodens noggrannhetsordning n Dessutom tillkommer avrundningsfel, normalt mycket mindre än trunkeringsfel n Lokalt fel, L k, härleds genom att beräkna skillnaden mellan approximativ lösningen y k + 1 beräknad med en numerisk metod och Taylorutvecklingen av den exakta yt ( k + 1) n Lokalt fel av ordning p+1 innebär att L k är en konstant multiplicerat med h p+1, brukar skrivas O ( h p + 1) n Globalt fel, E k, är det ackumulerade felet vid steg k. Svårare att härleda ett exakt uttryck, men gäller att: E k = O (h p ) om L k = O (h p+1 ) Motivering: Efter N steg fås N st lokala fel: NO (h p+1 ) = t N! t 0O (h p+1 ) = (t h N! t 0 )O (h p ) =O (h p ) t eftersom N t0 tn t h= N = 0 N h Noggrannhetsordning Noggrannhetsordning n Om en metod har globalt fel O (h p ) säger man att den har noggrannhetsordning p n Noggrannhetsordning betecknar att globalt fel Ek 0 lika snabbt som h p! 0 n Noggrannhetsordning får man enklast fram via det lokala felet (= p+1 => n.o. p) n För Eulers metod (både explicit och implicit) gäller: Lokalt fel O (h 2 ) Globalt fel O (h) Noggrannhetsordning 1 n Finns metoder av högre ordning n Heuns metod (2-stegs Runge Kuttametod): noggrannhetsordning 2 n Klassisk Runge Kutta (4-stegs R-K-metod): noggrannhetsordning 4 n Trapetsmetoden: noggrannhetsordning 2 3
Noggrannhetsordning Noggrannhetsordning n Man vill normalt ha en given noggrannhet i sina beräkningar och steglängd väljs automatiskt efter detta n Valet av metod är (bl a) en avvägning mellan noggrannhetsordning och effektivitet Hög n.o. => stor stegläng => färre beräkningssteg Låg n.o. => kort steglängd => många ber. steg Hög n.o => varje beräkningssteg innehåller fler operationer (pga att metoden mer komplicerad) Låg n.o. => varje beräkningssteg innehåller färre operationer n Ofta någonstans mittemellan, t ex n.o. ca 4 vanligt (jfr ode45) n Har s-stegs R-K alltid noggrannhetsordning s? Nej 1 < s 4 max n.o. = s 5 s 7 max n.o. = s-1 (bevisat 1963) 8 s 9 max n.o. = s-2 (bevisat 1965) s = 10 max n.o. = 7 (bevisat 1985) s = 11 max n.o. = 8 (bevisat 1985) En metod med s=17 har konstruerats! n Adaptiva metoder ställer själv in steglängden så att viss noggrannhet uppnås n Steglängden varierar vid snabba förlopp kort steglängd, långsamma förlopp lång steglängd n Om steglängden blir alltför kort uppfylls toleransen men metoden tar onödigt lång tid (ineffektiv) n Alla Matlabs inbyggda lösare är adaptiva n Jämför integralavsnittet i Beräkningsvetenskap I som innehåller adaptivitet hos metoder för integraler Automatisk reglering av steglängd. Algoritmskiss: 1. Beräkna nytt värde y i+1 med steglängd h i 2. Uppskatta lokalt diskretiseringsfel, e i 3. Om (e i < tolerans) acceptera y i+1. Gå till nästa steg annars om (e i > tolerans) kasta y i+1, minska h i och gå till steg 1 annars om (e i << tolerans) kasta y i+1, öka h i och gå till steg 1 n Problem: vet ej den exakta lösningen, hur kan man då uppskatta felet? n Lösning: Använd Richardsonextrapolation (jfr integraler i Ber Vet I): Qh () Q(2) h E p 2 1 där Q(h) är beräkning med steglängd h, Q(2h) beräkning av samma värde med steglängd 2h, p är noggrannhetsordningen hos metoden. Alternativ metod för feluppskattning: n Beräkna y k+1 samtidigt med två metoder av olika noggrannhetsordning => y k+1 av n.o. p => L ky = O ( h p + 1) z k+1 av n.o. p+1 => L kz = O ( h p + 2) z k+1 är alltså noggrannare än y k+1 n Sökt: L ky = y(t k+1 ) - y k+1, men y(t k+1 ) ej känd. Ersätt y(t k+1 ) med lösning som ligger närmare y(t k+1 ) än y k+1. Kan använda z k+1 => z k+1 - y k+1 = [(y(t k+1 ) - y k+1 ] [y(t k+1 ) - z k+1 ] L ky L ky O ( h p + 2) 4
n Matlab s ode45 använder R-K-metod av n.o. 4 respektive n.o. 5 för feluppskattning n Båda metoderna kan beräknas ekonomiskt genom att samma koefficienter används i de olika stegen k i n ode45: k 1 = f (x i, y i ) k 2 = f (x i + h 4, y i + h 4 k 1 ) k 3 = f (x i + 3 8 h, y i + h( 3 32 k 1 + 9 32 k 2 )) k 4 = f (x i + 12 13 h, y i + h(1932 2197 k 1! 7200 2197 k 2 + 7296 2197 k 3 )) k 5 = f (x i + h, y i + h( 439 216 k 1! 8k 2 + 3680 513 k 3 + 845 4104 k 4 )) k 6 = f (x i + h 2, y i + h(!8 27 k 1 + 2k 2! 3544 2565 k 3 + 1859 4104 k 4! 11 40 k 5 )) y i+1 = y i + h( 25 216 k 1 + 1408 2565 k 2! 2197 4104 k 4! 1 5 k 5 ) z i+1 = y i + h( 16 135 k 1 + 6656 12825 k 3! 28561 56430 k 4! 9 5 k 5 + 2 55 k 6 ) n Testar med % y! =! y, t " 0 $ y(0) = y &% 0 där Re(!) < 0 (jfr lab) Lösningen till testekvationen n Ekvationen brukar användas som testekvation n Avtagande (stabil) lösning lösning via numerisk metod bör då också vara avtagande, annars är den numeriska metoden instabil n Testekvationen blir alltmer styv för ökande λ n Styv ekvation typiskt som ett pistolskott - ett mycket snabbt förlopp under kort tidsintervall n För system av ode:er kan det också bero på kraftigt skilda skalor i de olika ekvationerna n Test för λ =100=> villkor h<0.02 för stabilitet h = 0.020 0.018 0.021 n Test för λ =100 med implicit Euler h = 0.021 h = 0.05 Inga stabilitetsproblem n Observera att implicit och explicit Euler har samma noggrannhetsordning Explicit Euler, h = 0.05 Implicit Euler, h = 0.05 Samma storleksordning på felet 5
n Ju styvare problemet blir, ju mindre blir gränsen för h (jfr ökande λ i testekvationen) n Metoderna måste välja små h på hela beräkningsområdet som egentligen inte krävs av noggrannhetsskäl n Implicita metoder har bättre stabilitetsegenskaper och kan variera h enbart utgående från noggrannhet gör att dessa metoder går snabbare för styva problem n Om problemet är icke-styvt används explicita metoder som standard (ode45 standardmetoden i Matlab) 6