Föreläsning 12: Ickelinjära ekvationer (del 2) Dagens föreläsning

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)).