Professional Documents
Culture Documents
Resavanje Nelinearnih Jednacina
Resavanje Nelinearnih Jednacina
JEDNAČINA
ITERATIVNE METODE
predavač:
Aleksandar Kovačević
Rešavanje nelinearnih jednačina
• Na prethodna dva predavanja bavili smo se linearnim
jednačinama.
• MeĎutim, modeli realnog sveta nisu uvek linearni, često
moramo da koristimo nelinearne funkcije (nrp. polinome
velikog stepena, ex, sin(x), cos(x) itd).
• Rešavanje jednačina sa ovakvim fukcijama analitičkim
putem je često veoma teško.
Motivacioni primer
Detekcija kolizija u video igrama
• Kako detektovati da li i kad će doći do
kolizije dva objekta u video igrama?
Detekcija kolizija
linearno kretanje
• Prvo ćemo posmatrati linearno kretanje.
• Zadatak nam je da odredimo da li i kad će doći
do kolizije dve sfere koje se kreću linearno.
Detekcija kolizija
linearno kretanje
• Ako sfere A i B kreću iz pozcija Pa i Pb i imaju konstantne
brzine va i vb, njihovo kretanje može se opisati sledećim
jednačinama:
Detekcija kolizija
linearno kretanje
• Definišemo funkciju udaljenosti dve sfere po
vremenu.
• ....
Detekcija kolizija
linearno kretanje
• Moguća su 3 slučaja:
• nema realnih nula – sfere se nikad nisu niti će se sudariti.
• jedna realna nula – sfere će dodirnuti (okrznuti) jedna drugu u
jednoj tački.
• dve realne nule – sfere će se sudariti tj. proći će jedna kroz drugu u
nekom trenutku (taj trenutak je nula koja ima manju vrednost).
Detekcija kolizija
nelinearno kretanje
• Prethodni primer bilo je lako rešiti analitički, meĎutim
kretanje objekata njie uvek linearno.
• Šta ako imamo dve sfere koje se kreću po paraboli?
Detekcija kolizija
nelinearno kretanje
• Jednačine kretanja sfera sad imaju i ubrzanje Aa (Ab):
Detekcija kolizija
nelinearno kretanje
• Opet rešavamo nelinearnu jednačinu za udaljenost:
b b 4ac
2
roots
2a
x e x 0
Grafički metod
• Dobra osnova za prvu procenu lokacije rešenja i
početnog rešenja za numeričku metodu
• Ograničeni smo na 3d.
x
x e
xe 2 Rešenje
x [0,1] 1
x
x 0.6 1 2
Numeričke metode za rešavanje nelinearnih
jednačina
Numeričke metode
f ( xk ) tolerancija
Metoda polovljenja
• Jedna od najjednostavnijh metoda za
rešavanje nelinearnih jednačina.
• Kao uslov za korišćenje zahteva zatvoreni
interval za koji je poznato da sadrži rešenje.
<tolerancija
f(x)
f(c)
x1 x2
x1 x2
c
2
Matlab kod
function x=polovljenje(a,b,tacnost,funkcija)
if(feval(funkcija,a)*feval(funkcija,b)<0)
kraj = 0;
while(~kraj)
feval – izračunava
c=(a+b)/2;
f(a) fc=feval(funkcija,c);
vrednost funkcije
if(fc==0|abs(b-a)<tacnost) “funkcija” u tački a
kraj=1; tj. f(a)
c b else
if(feval(funkcija,c)*feval(funkcija,a)<0)
b=c;
a else
a=c;
f(b) end
end
end
x=c;
end
Primer
x-cos(x)=0 - koristimo interval [-1,1]
rešenje x=0.7390851
2.5
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Matlab kod
• Ostaje da objasnimo kako u kodu specificiramo jednačinu
koju rešavamo tj. funkciju čiju nulu tražimo.
• Dva od mogućih načina:
• kreiramo posebnu Matlab funkciju
function y = jednacina(x)
y=x-cos(x);
• polovljenje(-1,1,10^-5,’jednacina’)
• prosleĎujemo funkciju direktno u pozivu metode polovljenja
• polovljenje(-1,1,10^-5,@(x)x-cos(x))
Primer
x-cos(x)=0 – Iteracija 1. 1 1
a=-1 c 0 b=1
2.5 2
1.5 f(b)f(c)<0
pa a=c
1
f(b)
0.5
-0.5
f(c)
-1
f(a)
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Iteracija 2. 0 1
c 0.5
2
2.5
a=0 b=1
1.5 f(b)f(c)<0
pa a=c
1
f(b)
0.5
0
f(c)
-0.5
-1
f(a)
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Iteracija 3. 0.5 1
c 0.75
2
2.5
a=0.5 b=1
1.5 f(a)f(c)<0
pa b=c
1
f(b) videti
0.5
f(c) sledeći
0
slajd
f(a)
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Iteracija 3. Zoom
0.5
f(b)
0.4
0.3
f(a)f(c)<0
0.2 pa b=c
0.1
f(c)
0
-0.1
-0.2
-0.3 f(a)
-0.4
-0.5
1.5
0.5
-0.5
-1
-1.5
-2
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Tabela
Iteracija a b c ba f(c)
• Konvergencija je spora.
• Pokazaćemo da je linearna.
Brzina konvergencije za iterativne metode
e k 1
lim C
k k r
e
• r=1 i C (0,1) – linearna konvergencija
• r=1 i C 0 – superlinearna k C 0
• r=2 – kvadratna
Brzina konvergencije za metodu polovljenja
1
• Za grešku u k-toj iteraciji važi: ba
2
1
e x xˆ k b a
k k
( xi xi 1 )
xi 1 xi f ( xi )
f ( xi ) f ( xi 1 )
Metoda sečice izvoĎenje formule
• Treba nam prava kroz dve tačke xi i xi-1.
• xi+1 je tačka u kojoj ta prava seče x-osu tj. ima y=0.
y kx n ( xi 1 , f ( xi 1 )) i ( xi , f ( xi ))
f ( xi 1 ) kxi 1 n
f ( xi ) kxi n k ? n ?
(2) (1) f ( xi ) f ( xi 1 ) k ( xi xi 1 )
f ( xi ) f ( xi 1 )
k ; n f ( xi ) kxi
xi xi 1
zamenimo n u y kx n y kx f ( xi ) kxi
f ( xi ) f ( xi 1 )
y f ( xi ) k ( x xi ) y f ( xi ) ( x xi )
xi xi 1
Da bi dobili xi+1 iz xi i xi-1 koristimo jednačinu prave kroz tačke xi and xi-1.
Onda u nju zamenimo (xi+1,0) i rešimo za xi+1.
f ( xi ) f ( xi 1 )
y f ( xi ) x xi jednačina prave
xi xi 1
f ( xi ) f ( xi 1 )
0 f ( xi ) xi 1 xi zamenimo (xi+1,0)
xi xi 1
f ( xi )xi xi 1
xi 1 xi rešimo za xi+1
f ( xi ) f ( xi 1 )
xi 1 xi f ( xi )
xi xi 1
f ( xi ) f ( xi 1 )
Metoda sečice
0=axm+b
x0 x2 x3 x5 x4 x1
f(xm)
Metoda sečice
Napomena
• Metoda sečice je otvorena metoda.
• Ne zahteva da za prve dve tačke važi f(x0)f(x1)<0 tj.
• Ne zahteva da se rešenje nalazi u intervalu [x0,x1].
( x1 x0 )
x2 x1 f ( x1 )
f ( x1 ) f ( x0 )
( x2 x1 )
x3 x2 f ( x2 )
f ( x2 ) f ( x1 )
( x3 x2 )
x4 x3 f ( x2 )
f ( x3 ) f ( x2 )
rešenje nije u
.... intervalu
[x1,x2].
Matlab kod
function x=secica(a,b,maxIter,tacnost,funkcija)
for i=1:maxIter sečica je otvoren metod pa se
fa=feval(funkcija,a); ne proverava f(a)f(b)<0
fb=feval(funkcija,b);
k=(fb-fa)/(b-a);
n=fb-k*b; y=kx+n , za y=0, x=? ->
c=-n/k;
0=kx+n -> x=-n/k
fc=feval(funkcija,c);
if(abs(fc)<tacnost)
break;
end
a=b; sečica je otvoren metod pa se
b=c; abs(b-a) ne smanjuje dovoljno
end brzo sa približavanjem
x=c; rešenju.
Zato koristimo smanjenje
vrednosti funkcije fc kao uslov
zaustavljanja.
Matlab kod
• Specificiramo jednačinu koju rešavamo tj. funkciju čiju
nulu tražimo.
• Dva od mogućih načina:
• kreiramo posebnu Matlab funkciju
function y = jednacina(x)
y=x-cos(x);
• secica(-1,1,100,10^-5,’jednacina’)
• prosleĎujemo funkciju direktno u pozivu metode polovljenja
• secica(-1,1,100,10^-5,@(x)x-cos(x))
Primer
x-cos(x)=0 – Iteracija 1.
x2 x1 f ( x1 )
x1 x0 0.540302
x0=-1 f ( x1 ) f ( x0 ) x1=1
3
1
f(x1)
x2
0
x0 x1
-1
f(x0)
-2
-3
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Iteracija 2. f ( x2 )x2 x1
x x2 0.728010
x0=-1 3 f ( x2 ) f ( x1 ) x1=1
3
1 f(x1)
x2
0
x0 x3 x1
-1 f(x2)
-2
f(x0)
-3
-4
-5
-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
Primer
x-cos(x)=0 – Iteracija 2. (Zoom)
0.2
0.15
0.1
0.05
x3=0.728010
0
x=0.7390851
-0.05
tačno rešenje
-0.1
-0.15
-0.2
-0.25
0.65 0.7 0.75 0.8 0.85
Primer
x-cos(x)=0 – Iteracija 3. (Zoom)
-4
x 10
3
Napomena:
2
x4 deluje da
1 je udaljeniji
x4=0.739084 od x u
0 odnosu na x3
x=0.7390851 (prethodni
-1
tačno rešenje slajd), samo
-2 zato što je
na ovom
-3
slajdu veći
-4 zoom.
0.7383 0.7383 0.7384 0.7384 0.7385 0.7385 0.7386 0.7386 0.7387 0.7387
Primer
x-cos(x)=0 interval x0=-1, x1=1
Tabelarni prikaz
Iteracija a b c ba f (c)
1 -1.000000 1.000000 0.540302 2.00000000000000000 0.31725090997825367
2 1.000000 0.540302 0.728010 0.45969769413186023 0.01848939457760324
3 0.540302 0.728010 0.739627 0.18770805559947734 0.00090700440040725
4 0.728010 0.739627 0.739084 0.01161665116311650 0.00000222997338051
0=axm+b
x0 x2 x3 x4 x5 x1
f(xm)
Metoda sečice
Iteracija a b c f(a)*f(b) f (c)
1 -1.000000 1.000000 0.540302 -0.70807341827357118 0.31725090997825367
2 1.000000 0.540302 0.728010 -0.14583951177823759 0.01848939457760324
3 0.540302 0.728010 0.739627 0.00586577725469162 0.00090700440040725
4 0.728010 0.739627 0.739084 -0.00001676996224275 0.00000222997338051
f ( xi )
xi 1 xi
f ' ( xi )
Njutnova metoda
(metoda tangente)
jednačina tangente u tački xi:
y f ( xi ) f ' ( xi )( x xi )
tangenta seče x-osu u tački xi+1
za y=0:
0 f ( xi ) f ' ( xi )( x xi )
f ( xi ) 0
f ( xi )
'
xi xi 1
f ( xi )
xi 1 xi
xi+1 xi f ' ( xi )
Njutnova metoda
(metoda tangente)
f(x0)
f’(x0)
tangenta u f(x0)
x1
x2 f ( x0 )
x1 x0 x0
f ( x0 )
Matlab kod
function x=tangenta(maxIter,tacnost,funkcija,izvod,x0)
xn=x0;
xnplus1=x0;
for i=1:maxIter
fn = feval(funkcija,xn);
xnplus1 = xn-(fn/feval(izvod,xn));
fnplus1 = feval(funkcija,xnplus1);
if(abs(fnplus1)<tacnost)
break;
end
xn=xnplus1;
end
x=xnplus1;
Matlab kod
• Dva od mogućih načina da zadamo izvod:
• kreiramo još jednu Matlab funkciju
function y = jednacina(x) function y=jednacina_izvod(x)
y=x-cos(x); y=1+sin(x);
• tangenta(100,10^-5,’jednacina’,’izvod’,2.8)
• prosleĎujemo funkciju direktno u pozivu metode polovljenja
• tangenta(100,10^-5,@(x)x-cos(x),@(x)1+sin(x),2.8)
>> syms x
>> diff('x-cos(x)')
ans =
1+sin(x)
Primer f ( x0 ) 2.8 cos( 2.8)
x-cos(x)=0 x0=2.8 x1 x0 2.8 -0.003188
f ( x0 ) 1 sin( 2.8)
Iteracija 1.
6
Napomena:
(x0,f(x0)) x0=2.8 (a ne
4 x0=1 ili x0=-1
kao ranije)
odabran je
2
da bi se
bolje
0 ilustrovala
x1 x0 metoda.
-2
-4
-6
-4 -3 -2 -1 0 1 2 3 4
f ( x1 ) - 0.003188 cos(-0.003188)
x2 x1 -0.003188 1.003203
f ( x1 ) 1 sin( -0.003188)
Iteracija 2.
6
0
x1 x2
(x1,f(x1))
-2
-4
-6
-4 -3 -2 -1 0 1 2 3 4
f ( x2 ) 1.003203 cos(1.003203)
x3 x2 1.003203 0.750599
f ( x2 ) 1 sin( 1.003203)
Iteracija 3.
2 (x2,f(x2))
0
x3 x2
-2
-4
-6
-8
-10
-4 -3 -2 -1 0 1 2 3 4
f ( x2 ) 1.003203 cos(1.003203)
x3 x2 1.003203 0.750599
f ( x2 ) 1 sin( 1.003203)
Iteracija 3. (Zoom)
0.5
(x2,f(x2))
0.4
0.3
0.2
0.1
0
x3 x2
-0.1
x=0.7390851
-0.2
tačno rešenje
-0.3
-0.4
x=0.7390851
tačno rešenje
Njutnova metoda Divergencija
• Ako je početno rešenje daleko od nule, metoda divergira.
Na primer:
udaljanjvanje od rešenja
x0
beskonačno
kruženje oko
rešenja
x1=x3=x5
x0=x2=x4
Njutnova metoda Divergencija
Funkcija je x3-2x+2
Početno rešrnje je 0. Iteracije postupka beskonačno osciluju izmeĎu 0 i 1.
Konvergencija metoda, Grafički prikaz
Ilustracija brzine konvergencije različitih numeričkih metoda za problem:
x-cos(x)=0
Rezime metoda
Metod Prednosti Mane
Polovljenje -Garantovana konvergencija - Spora konvergencija
-Broj iteracija za toleranciju se - Zahteva da se rešenje nalazi
može unapred odrediti u [a,b] tj. da važi f(a)f(b)<0
-Laka za implementaciju
-Ne zahteva prvi izvod
Sečica -Brza konvergencija (sporija od - Nema garantovanu
Njutnove metode) konvergenciju
-Ne zahteva prvi izvod - Zahteva dve početne tačke
takve da važi f(x0)≠f(x1)
Regula -Garantovana konvergencija - Zahteva da se rešenje nalazi
(brža od polovljenja, sporija od u [x0,x1] tj. da važi f(x0)f(x1)<0
falsi sečice)
-Ne zahteva prvi izvod
Njutnov - Veoma brza konvergencija - Nema garantovanu
(ako je početno rešenje blizu konvergenciju
nule) - Zahteva postojanje prvog
izvoda i f’(x0)≠0