Dagens föreläsning Ickelinjära ekvationer Föreläsning 11: Ickelinjära ekvationer (del 1) Beräkningsvetenskap I Iterativa metoder Bisektion/intervallhalvering Sara Zahedi Institutionen för Informationsteknologi, Uppsala Universitet Newton-Raphsons metod Noggrannhet/stoppvillkor Konvergenshastighet 29 november, 2012 Kan inte datorn räkna ut lösningen direkt? Iterativ metod Ickelinjära ekvationer Behöver en startgissning, x0 . Bildar {xk }∞ k=1 följd av approximationer till den exakta lösningen x∗ . Finns oftast inga formler för lösningarna till en ickelinjär ekvation. Metoden konvergerar om x∞ = x∗ . Polynomekvationer kan bara lösas upp till grad 4 I praktiken når man inte till x∗ utan man stannar när en viss tolerans är uppfylld. Icke-linjära problem - iterativa metoder Iterativ metod x=startgissning while stoppvillkor ej uppfyllt x=ny gissning end Bisektion/intervallhalvering Löser f (x) = 0 1 Startintervall [a, b] så att f (a) och f (b) har olika tecken. Behöver en startgissning 2 Dela intervallet i två lika stora delar. Ny gissning beräknas från någon formel eller princip 3 Välj som nytt intervall den del där teckenbyte finns. Kan lyckas - konvergens 4 Upprepa eller misslyckas - divergens Hur snabbt metoden hittar lösningen - konvergenshastighet Bisektion/intervallhalvering Bisektion/intervallhalvering Pseudokod Stoppvillkor a, b givet x=(a+b)/2 while stoppvillkor ej uppfyllt if sign(f(a))==sign(f(x)) a=x else b=x end x=(a+b)/2 end Stanna då halva intervallet < tolerans, dvs while (b − a)/2 > tol där tol ges av användaren. Som lösning används (a+b)/2. Felet är då högst 0.5*intervallets längd ((b-a)/2). För kod i Matlab se filen bisection.m Newton-Raphson Newton-Raphson Pseudokod Löser f (x) = 0 1 Startgissning x0 . 2 Hitta nollställe till tangenten. 3 Välj nollställe till tangenten som ny gissning. 4 Upprepa från steg 2. x=startgissning while stoppvillkor ej uppfyllt x=x-f(x)/fprim(x) end För kod i Matlab se filen Newton.m Newton-Raphson Stoppvillkor Stoppvillkor Stanna då |xk+1 − xk | < tol eller där tol ges av användaren. |xk+1 −xk | |xk+1 | Används även som uppskattning av felet. < tol, Kan man inte använda f (xk+1 ) < tol? Stoppvillkor Konvergens Antag lim xk = x∗ . k→∞ Vad händer om metoden inte konvergerar? Hamnar i en oändlig loop eftersom stoppvillkoret aldrig uppfylls. Lägg också till maximalt antal iterationer som stoppvillkor maxiter=100; niter=0; while (felet > tol) && (niter < maxiter ) niter=niter+1; ... end Viktigt att metoden konvergerar snabbt, mäts med kvoten: lim k→∞ |xk+1 − x∗ | = C, |xk − x∗ |r där C 6= 0 kallas asymptotisk felkonstant. Om C 6= 0 så sägs talföljden {xk } ha konvergensordning r . r = 1, C < 1: linjär konvergens r > 1: superlinjär konvergens r = 2: kvadratisk konvergens r = 3: kubisk konvergens Konvergens I praktiken: eftersom man inte vet x∗ tittar man på kvoten |xk+1 − xk | . |xk − xk−1 |r