Dagens föreläsning Kan inte datorn räkna ut lösningen direkt?

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