Dagens föreläsning Ickelinjära ekvationer Föreläsning 12: Ickelinjära ekvationer (del 2) Beräkningsvetenskap I Repetition Konvergenshastighet Sara Zahedi Institutionen för Informationsteknologi, Uppsala Universitet Matlabs inbyggda lösare: fzero Fixpunktsiteration 4 december, 2012 Repetition Repetition Ickelinjära ekvationer Bisektion/intervallhalvering Finns oftast inga formler för lösningarna till en ickelinjär ekvation. Icke-linjära problem - iterativa metoder Bisektion/intervallhalvering och Newton-Raphson Löser f (x) = 0 1 Startintervall [a, b] så att f (a) och f (b) har olika tecken. 2 Dela intervallet i två lika stora delar. 3 Välj som nytt intervall den del där teckenbyte finns. 4 Upprepa Repetition Repetition Bisektion/intervallhalvering: Stoppvillkor Newton-Raphson Stanna då halva intervallet < tolerans, dvs while (b − a)/2 > tol där tol ges av användaren. Löser f (x) = 0 1 Startgissning x0 . 2 Hitta nollställe till tangenten. Som lösning används (a+b)/2. 3 Välj nollställe till tangenten som ny gissning. Felet är då högst 0.5*intervallets längd ((b-a)/2). 4 Upprepa Repetition Konvergenshastighet Newton-Raphson: Stoppvillkor Antag lim xk = x∗ . k→∞ Viktigt att metoden konvergerar snabbt, mäts med kvoten: Stanna då |xk+1 − xk | < tol eller där tol ges av användaren. |xk+1 −xk | |xk+1 | lim < tol, Används även som uppskattning av felet. k→∞ |x∗ − xk+1 | = C, |x∗ − xk |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 Konvergenshastighet Konvergens Bisektionsmetoden Newton-Raphson Felet halveras varje steg. Linjär konvergens med C = 1/2 för bisektionsmetoden. Konvergens Kvadratisk konvergens hos Newton-Raphson (visa med Taylorutveckling). Fel vid iteration k + 1 är ungefär felet vid iteration k i kvadrat. Nyttfel = C · Fel 2 Bisektionsmetoden I praktiken: eftersom man inte vet x∗ tittar man på kvoten |xk+1 − xk | . |xk − xk−1 |r + Robust - konvergerar alltid om funktionen är kontinuerlig och du har get startintervall [a, b] så att f (a) och f (b) har olika tecken. - Långsam Newton-Raphson Robustare: Bisektion+Newton-Raphson Newton-Raphson konvergerar snabbt om startgissningen är ”tillräckligt nära”. + Konvergerar snabbt om startgissningen är ”tillräckligt nära”. Hur kommer man tillräckligt nära? Koppla in Bisektionsmetoden, t ex så här: - Svårt att förutse vilket nollställe som hittas. - Kan hamna i cykliska förlopp - studsar hela tiden mellan samma sekvens av värden. - Om gissningen xk hamnar nära eller i en extrempunkt blir f 0 (xk )=0 eller nästan 0. 1 Bestäm ett intervall där nollstället finns 2 Kör Newton-Raphson 3 - Kräver beräkning av derivatan (kan beräkna derivatan numeriskt). 4 Om konvergens så klart annars (Newton-Raphson t ex hamnat utanför intervallet) koppla in Bisektion några steg för att minska intervallet Gå till punkt 1 med nya intervallet Algoritmen ovan kombinerar Newton-Raphsons snabbhet och Bisektions säkerhet. Vad gör fzero? fzero bygger på en kombination av bisektionsmetoden Sekantmetoden (behöver inte derivatan) Ickelinjära ekvationer i Matlab Skriv först på formen f (x) = 0. Problemet blir att hitta nollställe. Definera f(x) i en Matlabfunktion func. Använd fzero: x=fzero(@func, x0), där x0 är en startgissning. Man kan även använda intervall som gissning x=fzero(@func, [a b]) a, b så att sign(f (a)) 6= sign(f (b)).