2. Nelinearne enaÄbe
2. Nelinearne enaÄbe
2. Nelinearne enaÄbe
- No tags were found...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>2.</strong> Reševanje nelinearnih enačb<br />
Iščemo rešitve enačbe f(x) = 0, kjer je f : R → R dana realna funkcija.<br />
zahtevamo, da je f zvezna, saj imamo potem naslednji eksistenčni izrek.<br />
Ponavadi<br />
Izrek 1. Če je f realna zvezna funkcija na [a, b] in velja f(a) · f(b) < 0, potem obstaja<br />
tak ξ ∈ (a, b), da je f(ξ) = 0.<br />
a<br />
x<br />
b<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>1 Bisekcija<br />
Ponavadi ne obstaja tako predstavljivo število x ∗ , da bi bilo f(x ∗ ) eksaktno nič. Pri<br />
bisekciji iščemo čim manjši interval [a, b], na katerem je funkcija f v krajiščih različno<br />
predznačena.<br />
function c = bisekcija(f,a,b,ɛ)<br />
while |b − a| > ɛ|b|<br />
end<br />
c = a + (b − a)/2<br />
if sign(f(a)) = sign(f(c))<br />
else<br />
end<br />
a = c<br />
b = c<br />
Bor Plestenjak - Numerična analiza 2010
Bisekcija<br />
• Zakaj namesto c = (a+b)/2 uporabljamo c = a+(b−a)/2 fl((a+b)/2) lahko<br />
ne leži na [a, b]. V P (10, 4, −10, 10) tako npr. za a = 0.6666 in b = 0.6667<br />
dobimo fl((a + b)/2) = 0.6665.<br />
◦ Zakaj ne uporabljamo pogoj |b − a| > ɛ Namesto relativnega pogoja lahko vzamemo<br />
tudi absolutnega, a moramo paziti. V enojni natančnosti npr. iz a = 1000 in b = 1001<br />
ne moremo dobiti intervala, za katerega bi veljalo |b − a| ≤ 10 −10 .<br />
• Zakaj ne testiramo, če je fc = 0<br />
Ker ta pogoj skoraj nikoli ni izpolnjen.<br />
• Zakaj namesto fa · fc > 0 preverjamo sign(fa) = sign(fc) Računanje produkta<br />
fa · fc je zahtevnejše od preverjanja predznakov, poleg tega pa se tudi izognemo<br />
možnim težavam zaradi podkoračitve ali prekoračitve.<br />
• Metoda očitno odpove pri sodih ničlah.<br />
• Bisekcijo lahko uporabljamo tudi za iskanje lihih polov, računati pa moramo na težave<br />
zaradi prekoračitve v bližini pola.<br />
• Če je na [a, b] več rešitev, bisekcija najde le eno.<br />
• V vsakem koraku se napaka približno razpolovi.<br />
Bor Plestenjak - Numerična analiza 2010
Zgled: Z bisekcijo poiščimo ničle funkcije f(x) = x − tan(x).<br />
Težko je poiskati dober začetni interval, saj so ničle v bližini polov. Rešitev je, da namesto<br />
f iščemo ničle g(x) = x cos(x) − sin(x). Sedaj nimamo težav s poli.<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>2 Navadna iteracija<br />
Pri navadni iteraciji enačbo f(x) = 0 zapišemo v obliki x = g(x) in nato delamo iteracijo<br />
x r+1 = g(x r ), r = 0, 1, . . .. Funkcijo g imenujemo iteracijska funkcija.<br />
Zgledi iteracijskih funkcij:<br />
• g(x) = x − f(x),<br />
• g(x) = x − Cf(x), kjer je C ≠ 0,<br />
• g(x) = x − h(x)f(x), kjer je h(x) ≠ 0.<br />
Bor Plestenjak - Numerična analiza 2010
Zgled : Iz grafa polinoma p(x) = x 3 − 5x + 1<br />
vidimo, da ena ničla leži blizu 0. Enačbo zapišemo v obliki x = 1+x3<br />
5<br />
in tvorimo zaporedje<br />
približkov<br />
x 0 = 0<br />
x r+1 = 1+x3 r<br />
5<br />
, r = 0, 1, . . .<br />
To zaporedje skonvergira k α = 0.210639676 . . .. Iterativna funkcija je dobra le za<br />
srednjo ničlo. Do ostalih dveh korenov pridemo npr. z iteracijo x r+1 = 3√ 5x r − 1.<br />
Bor Plestenjak - Numerična analiza 2010
Konvergenca navadne iteracije<br />
Naj bo α koren enačbe x = g(x). O konvergenci v bližini korena odloča g ′ (α). Če je<br />
|g ′ (α)| < 1, imamo privlačno točko, sicer pa odbojno točko.<br />
Izrek <strong>2.</strong> Naj bo α koren enačbe x = g(x), naj bo g zvezno odvedljiva in naj velja<br />
|g ′ (α)| < 1. Potem obstaja taka okolica I za α, da za vsak x 0 ∈ I zaporedje<br />
konvergira k α.<br />
x r+1 = g(x r ), r = 0, 1, . . .<br />
Dokaz. Naj bo e k = x k − α napaka približka x k .<br />
Velja<br />
e k+1 = x k+1 − α = g(x k ) − g(α) = g ′ (ξ k )(x k − α),<br />
kjer je ξ k točka med x k in α.<br />
Če začnemo dovolj blizu α, potem zaradi |g ′ (α)| < 1 obstaja konstanta C < 1, da je |g ′ (ξ k )| ≤ C < 1.<br />
Tako dobimo<br />
|e k+1 | ≤ C|e k | ≤ C 2 |e k−1 | ≤ · · · ≤ C k |e 0 |<br />
in ko gre k → ∞ gre x k → α.<br />
Bor Plestenjak - Numerična analiza 2010
Red konvergence<br />
Definicija 3.<br />
velja<br />
Red konvergence je p, če v bližini α obstajata konstanti C 1 , C 2 > 0, da<br />
C 1 |x r − α| p ≤ |x r+1 − α| ≤ C 2 |x r − α| p .<br />
Lema 4. Naj bo iteracijska funkcija g v okolici negibne točke α p-krat zvezno odvedljiva<br />
in naj velja g (k) (α) = 0, k = 1, . . . , p − 1 in g (p) (α) ≠ 0. Potem ima iteracija<br />
x r+1 = g(x r ), r = 0, 1, . . ., v bližini rešitve red konvergence p.<br />
Dokaz.<br />
Iz razvoja g v Taylorjevo vrsto okrog α dobimo g(x) = α + 1 p! (x − α)p g (p) (ξ).<br />
Posebni primeri konvergence:<br />
• p = 1: linearna (konstantno korakov za novo točno decimalko)<br />
• p = 2: kvadratična (število točnih decimalk se v vsakem koraku podvoji)<br />
• p = 3: kubična (število točnih decimalk se v vsakem koraku potroji)<br />
• 1 < p < 2: superlinearna<br />
Bor Plestenjak - Numerična analiza 2010
Primerjava nekaterih iteracijskih funkcij za enačbo x 2 + ln x = 0.<br />
Za enačbo x 2 + ln x = 0, ki ima rešitev α = 0.6529186, primerjamo tri iteracijske<br />
funkcije:<br />
• g 1 (x) = e −x2 , g ′ 1<br />
(α) = −0.853, red je 1,<br />
• g 2 (x) = 1 2 (x + e−x2 ), g ′ 2<br />
(α) = 0.074, red je 1,<br />
• g 3 (x) = 2x3 +e −x2<br />
1+2x 2 , g ′ 3<br />
(α) = 0, red je <strong>2.</strong><br />
Za različne začetne približke smo primerjali število iteracij dokler se zaporedna približka ne<br />
razlikujeta za manj kot 10 −12 .<br />
x 0 0.6 0.7 1 10 100<br />
g 1 163 162 173 175 175<br />
g 2 14 14 15 18 21<br />
g 3 5 5 7 109 10013<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>3 Newtonova ali tangentna metoda<br />
Naj bo x približek za ničlo funkcije f.<br />
v Taylorjevo vrsto<br />
Če upoštevamo le prva dva člena v razvoju f(x + h)<br />
f(x + h) = f(x) + f ′ (x)h + f ′′ (x)h 2<br />
2<br />
+ · · · ,<br />
dobimo<br />
f(x + h) ≈ f(x) + f ′ (x)h.<br />
Če predpostavimo, da je f ′ (x) ≠ 0, iz enačbe f(x+h) = 0 dobimo h ≈ −f(x)/f ′ (x).<br />
Ker je to le približek, postopek ponavljamo:<br />
r = 0, 1, . . .<br />
x r+1 = x r − f(x r)<br />
f ′ (x r )<br />
Izpeljali smo tangentno oz. Newtonovo metodo.<br />
Bor Plestenjak - Numerična analiza 2010
Geometrijska izpeljava<br />
Pri tangentni metodi funkcijo f aproksimiramo s tangento v točki (x r , f(x r )) in za<br />
naslednji približek vzamemo presečišče tangente z osjo x.<br />
x r+1 = x r − f(x r)<br />
f ′ (x r )<br />
Analitično je tangentna metoda posebna oblika navadne iteracije, kjer za iteracijsko funkcijo<br />
vzamemo<br />
g(x) = x − f(x)<br />
f ′ (x) .<br />
Bor Plestenjak - Numerična analiza 2010
Red konvergence tangentne metode<br />
g(x) = x − f(x)<br />
f ′ (x) ,<br />
z odvajanjem dobimo g′ (x) = f(x)f ′′ (x)<br />
.<br />
f ′2 (x)<br />
Če je α enostaven koren, dobimo g ′ (α) = 0 in konvergenca tangentne metode je vsaj<br />
kvadratična. V tem primeru je<br />
g ′′ (α) = f ′′ (α)<br />
f ′ (α) ,<br />
torej je v primeru f ′′ (α) ≠ 0 konvergenca kvadratična, sicer pa vsaj kubična.<br />
Če je α večkratni koren, je konvergenca linearna, izkaže se, da za m-kratno ničlo velja<br />
lim x→α g ′ (x) = 1 − 1 m .<br />
Konvergenca tangentne metode je<br />
• kvadratična: enostaven koren in f ′′ (α) ≠ 0 (standardna situacija),<br />
• linearna: večkratni koren,<br />
• vsaj kubična: enostaven koren in f ′′ (α) = 0.<br />
Bor Plestenjak - Numerična analiza 2010
Zgled za tangentno metodo<br />
Poglejmo polinom p(x) = x 4 − 11 2 x3 + 21 2 x2 − 8x + 2 = (x − 1 2 )(x − 1)(x − 2)2 .<br />
Če vzamemo začetne približke 0.6, 1.1 in <strong>2.</strong>1 opazimo, da imamo pri 0.6 kvadratično<br />
konvergenco, pri 1.1 kubično konvergenco (prevoj) in pri <strong>2.</strong>1 linearno konvergenco (dvojna<br />
ničla).<br />
Bor Plestenjak - Numerična analiza 2010
1: 0.435294117647059<br />
2: 0.489337730251386<br />
3: 0.499639486749880<br />
4: 0.499999567515696<br />
5: 0.499999999999377<br />
6: 0.500000000000000<br />
7: 0.500000000000000<br />
Zgled za tangentno metodo<br />
1: 0.994117647058826<br />
2: 1.000001228818246<br />
3: 1.000000000000001<br />
4: 1.000000000000001<br />
1: <strong>2.</strong>053562005277051<br />
2: <strong>2.</strong>027876685351187<br />
3: <strong>2.</strong>014247493817868<br />
4: <strong>2.</strong>007206326821148<br />
5: <strong>2.</strong>003624539543750<br />
6: <strong>2.</strong>001817710121426<br />
7: <strong>2.</strong>000910227515493<br />
8: <strong>2.</strong>000455458435571<br />
9: <strong>2.</strong>000227815584859<br />
10: <strong>2.</strong>000113929407939<br />
11: <strong>2.</strong>000056970115901<br />
12: <strong>2.</strong>000028486376981<br />
13: <strong>2.</strong>000014243467003<br />
14: <strong>2.</strong>000007121897697<br />
15: <strong>2.</strong>000003561048605<br />
16: <strong>2.</strong>000001780574947<br />
17: <strong>2.</strong>000000890692019<br />
18: <strong>2.</strong>000000447946005<br />
19: <strong>2.</strong>000000223231179<br />
20: <strong>2.</strong>000000111826573<br />
21: <strong>2.</strong>000000069466783<br />
22: <strong>2.</strong>000000018324164<br />
23: <strong>2.</strong>000000018324164<br />
Bor Plestenjak - Numerična analiza 2010
Konvergenčni izreki za tangentno metodo<br />
Pri enostavni ničli imamo vedno konvergenco, če je začetni približek dovolj dober.<br />
Izrek 5. Naj bo α enostavna ničla dvakrat zvezno odvedljive funkcije f. Potem obstajata<br />
okolica I točke α in konstanta C, da tangentna metoda konvergira za vsak x 0 ∈ I in da<br />
približki x r zadoščajo oceni<br />
|x r+1 − α| ≤ C(x r − α) 2 .<br />
Pri določenih pogojih lahko dokažemo tudi globalno konvergenco iz poljubne začetne točke.<br />
Izrek 6. Naj bo f na intervalu I = [a, ∞) dvakrat zvezno odvedljiva, naraščajoča in<br />
konveksna funkcija, ki ima ničlo α ∈ I. Potem je α edina ničla f na I in za vsak x 0 ∈ I<br />
tangentna metoda konvergira k α.<br />
Bor Plestenjak - Numerična analiza 2010
Tangentna metoda potrebuje dobre začetne priblžke<br />
Izreki nam zagotavljajo konvergenco tangentne metode dovolj blizu ničle ali pa za funkcijo<br />
prave oblike. Sicer pa imamo lahko zelo različno obnašanje in slepa uporaba tangentne<br />
metode ni priporočljiva. Naslednja dva primera kažeta divergenco, ko nismo dovolj blizu<br />
ničle in zaciklanje približkov.<br />
Bor Plestenjak - Numerična analiza 2010
Tangentna metoda v kompleksnem<br />
Tangentno metodo lahko uporabljamo tudi za računanje kompleksnih korenov enačb. Naj<br />
bo f analitična funkcija in naj velja f ′ (z 0 ) ≠ 0. Označimo ploskev w(z) = |f(z)| nad<br />
kompleksno ravnino. Kompleksno število<br />
z 1 = z 0 − f(z 0)<br />
f ′ (z 0 ) ,<br />
ki ga dobimo po enem koraku tangentne metode, je presečišče dveh premic:<br />
• presečišča tangentne ravnine na ploskev w = |w(z)| v točki (z 0 , w(z 0 )) z ravnino<br />
w = 0,<br />
• projekcije gradienta na ploskev w = |w(z)| v točki (z 0 , w(z 0 )) na ravnino w = 0.<br />
Če imamo npr. polinom z realnimi koeficienti in iščemo kompleksno ničlo, potem moramo<br />
uporabiti kompleksni začetni približek, sicer bodo vsi približki realni.<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>4 Sekantna metoda<br />
Namesto tangente uporabljamo sekanto, potrebujemo dva začetna približka:<br />
x r+1 = x r −<br />
x r − x r−1<br />
f(x r ) − f(x r−1 ) f(x r), r = 1, 2, . . . .<br />
Analitično f ′ (x r ) aproksimiramo z diferenčnim kvocientom f(x r) − f(x r−1 )<br />
x r − x r−1<br />
.<br />
Bor Plestenjak - Numerična analiza 2010
Lastnosti sekantne metode<br />
◦ Ne spada med navadno iteracijo, saj je naslednji približek odvisen od dveh zadnjih.<br />
◦ Ne potrebujemo odvodov.<br />
◦ V vsakem koraku izračunamo le eno vrednost funkcije (razen v prvem).<br />
◦ Red konvergence je 1.62 oz. (1 + √ 5)/2, kar pomeni, da je superlinearna.<br />
Pri tangentni metodi število točnih decimalk narašča kot<br />
pri sekantni metodi pa kot<br />
1, 2, 4, 8, 16,<br />
1, 1.6, <strong>2.</strong>6, 4.1, 6.6, 10.5, 16.8.<br />
Za maksimalno natančnost v dvojni natančnosti tako pri tangentni metodi potrebujemo 4<br />
korake in izračun 4f in 4f ′ . Pri sekantni metodi porabimo 6 korakov in izračun 7f. To<br />
pomeni, da je glede na porabljeno delo sekantna metoda lahko celo boljša od tangentne.<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>5 Inverzna interpolacija<br />
Posplošitev sekantne metode je, da vzamemo zadnje tri približke x r , x r−1 , x r−2 in funkcijo<br />
f aproksimiramo s parabolo skozi točke (x r , f(x r )), (x r−1 , f(x r−1 )), (x r−2 , f(x r−2 )).<br />
Tako dobimo Mullerjevo metodo. Uporabna je za iskanje kompleksnih ničel z realno<br />
aritmetiko, saj ima dobljena parabola lahko kompleksni ničli. Red konvergence je 1.83, so<br />
pa težave, kadar ni jasno, katero izmed dveh ničel izbrati.<br />
Obratni pristop je, da zamenjamo vlogi x in y ter poiščemo kvadratni polinom p, za katerega<br />
velja p(f(x r )) = x r , p(f(x r−1 )) = x r−1 , p(f(x r−2 )) = x r−2 . Naslednji približek je<br />
potem kar x r+1 = p(0). To je inverzna kvadratna interpolacija, red konvergence pa je<br />
1.83 kot pri Mullerjevi metodi.<br />
Mullerjeva m.<br />
inv. kvad. int.<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>6 Kombinirana metoda<br />
S kombiniranjem različnih metod lahko dosežemo robustnost in hitro konvergenco. Če<br />
imamo tak začetni interval [a, b], da je f(a)f(b) < 0, potem lahko npr. kombiniramo<br />
bisekcijo, sekantno metodo in inverzno kvadratno interpolacijo:<br />
a in b preuredimo tako, da je |f(b)| ≤ |f(a)| ter vzamemo c = a.<br />
Dokler ni |a − b| < ɛ ponavljaj<br />
a) Izračunaj s: če je c ≠ a naredi en korak inverzne kvadratne interpolacije, sicer pa<br />
sekantne metode.<br />
b) Če je izpolnjen kateri izmed naslednjih pogojev, naredi korak bisekcije in vzemi s =<br />
(a + b)/2:<br />
• s ne leži med (3a + b)/4 in b,<br />
• v prejšnjem koraku je bila uporabljena bisekcija in |s−b| ≥ |b−c|/2 ali |b−c| < δ,<br />
• v prejšnjem koraku ni bila uporabljena bisekcija in |s−b| ≥ |c−d|/2 ali |c−d| < δ.<br />
c) d = c, c = b, glede na predznak f(s) zamenjaj a oziroma b z s.<br />
d) Po potrebi medsebojno zamenjaj a in b, da je |f(b)| ≤ |f(a)|.<br />
Ker nam točka nikoli ne pade iz [a, b], imamo zagotovljeno konvergenco, ki je v bližini<br />
ničle superlinearna.<br />
Bor Plestenjak - Numerična analiza 2010
<strong>2.</strong>7 Ničle polinomov<br />
Pri polinomih pogosto potrebujemo vse ničle polinoma p(x) stopnje n. Tudi če so<br />
koeficienti polinoma realni, so ničle lahko kompleksne. Za računanje je na voljo več<br />
pristopov:<br />
• Z eno izmed navedenih metod (npr. Newtonovo ali Mullerjevo) poiščemo eno ničlo x 1 ,<br />
potem pa obravnavamo polinom q(x) = p(x)/(x − x 1 ) ki je za eno nižje stopnje. To<br />
ponavljamo, dokler ne izračunamo vseh ničel. Za stabilnost je potrebno ničle izločati<br />
v pravilnem vrstnem redu, priporočljivo pa je tudi, da na koncu vse ničle vzamemo kot<br />
začetne približke za originalni polinom p(x) in naredimo še nekaj korakov.<br />
• Iz polinoma sestavimo t.i. pridruženo matriko A velikosti n × n, katere karakteristični<br />
polinoma je enak p(x). Ničle polinoma p(x) so potem kar lastne vrednosti matrike A.<br />
Tako ničle izračuna npr. Matlab z ukazom roots.<br />
• Uporabimo posebne metode, ki so namenjene samo za polinome, kot so npr. Laguerrova,<br />
Bairstowova, Jenkins-Traubova metoda, itd.<br />
Bor Plestenjak - Numerična analiza 2010
Wilkinsonov zgled<br />
Ničle polinomov so lahko zelo občutljive na motnje koeficientov. Tako ima npr. polinom<br />
p(x) = (x − 1)(x − 2) · · · (x − 20) = x 20 − 210x 19 + · · · + 20!<br />
ničle 1, 2, . . . , 20, točne ničle polinoma<br />
pa so<br />
g(x) = p(x) − 2 −23 x 19<br />
x 9 = 8.91752<br />
x 10,11 =<br />
.<br />
10.0953 ± 0.64310i<br />
x 16,17 = 16.7307 ± <strong>2.</strong>81263i<br />
x 18,19 = 19.5024 ± 1.94033i<br />
x 20 = 20.8469<br />
Čeprav so vse ničle enostavne in lepo separirane, majhna motnja povzroči velike spremembe.<br />
Bor Plestenjak - Numerična analiza 2010
Wilkinsonov zgled, <strong>2.</strong> del<br />
Wilkinson je s pomočjo zgornjega primera pokazal, da je računanje lastnih vrednosti matrike<br />
preko ničel karakterističnega polinoma lahko nestabilno. Standardni postopek je namreč bil:<br />
• Vzamemo matriko A ∈ R n×n in izračunamo koeficiente karakterističnega polinoma<br />
p(x) = a 0 + a 1 x + · · · + a n x n .<br />
• Z nekim algoritmom za računanje ničel polinoma izračunamo ničle polinoma p(x) in to<br />
so lastne vrednosti.<br />
Danes se je postopek obrnil.<br />
p(x), se zgodi naslednje:<br />
Če v Matlabu poženete ukaz za računanje ničel polinoma<br />
• Iz polinoma p(x) se sestavi matrika, katere karakteristični polinoma je p(x).<br />
• Z algoritmom za računanje lastnih vrednosti se izračunajo lastne vrednosti A in to so<br />
ničle našega polinoma.<br />
Bor Plestenjak - Numerična analiza 2010
Reševanje nelinearnih enačb v Matlabu<br />
V standardni verziji je za iskanje ničle realne funkcije ene spremenljivke na voljo funkcija fzero, ki uporablja<br />
kombinirano metodo. Oblika je fzero(fun,x0,options,p1,p2,...).<br />
• S prvim argumentom fun podamo funkcijo, katere ničlo iščemo. Možnosti so:<br />
◦ v obliki niza z definicijo funkcije, npr. fzero(’cos(x)-x’,0),<br />
◦ v obliki t.i. inline funkcije, npr. f=inline(’cos(x)-x’); fzero(f,[-1,1]),<br />
◦ v obliki niza z imenom funkcije, npr. fzero(’cos(x)-x’,0),<br />
◦ s kazalcem na funkcijo, npr. fzero(@humps,1).<br />
• Drugi argument x0 je začetni približek, ki je vektor z eno ali dvema komponentama.<br />
◦ fzero(’cos(x)-x’,[-1,1]): podamo točki, kjer je funkcija različno predznačena,<br />
◦ fzero(’cos(x)-x’,0): Matlab z iskanjem levo in desno sam išče začetni interval.<br />
• S tretjim argumentom lahko nastavimo parametre s pomočjo funkcije optimset, npr<br />
fzero(’cos(x)-x’,0,optimset(’Display’,’iter’,’TolX’,1e-4)). Parametri, ki jih lahko nastavimo<br />
so:<br />
◦ ’Display’: ali se izpisujejo tekoči približki, možnosti so ’iter’, ’off’, ’final’.<br />
◦ ’TolX’: pogoj za konec (ko bo razlika zadnjih dveh približkov pod mejo).<br />
◦ ’MaxIter’: maksimalno število iteracij.<br />
◦ ’TolFun’: pogoj za konec (ko bo vrednost funkcije pod mejo).<br />
• Z naslednjimi argumenti lahko nastavljamo dodatne argumente funkcije fun, če je to funkcija več<br />
spremenljivk. Zgled je f=inline(’besselj(0,x)-y’,’x’,’y’); fzero(f,[1 2],[],0.5).<br />
Bor Plestenjak - Numerična analiza 2010
Zgled - dvig tračnice<br />
h<br />
d<br />
d+e<br />
Imamo 2d dolgo tračnico, ki je na obeh koncih<br />
trdno vpeta. Tračnica se raztegne za 2e in<br />
se dvigne v obliki krožnega loka. Izračunaj,<br />
kolikšna je maksimalna oddaljenost od tal.<br />
sin φ = d/r in rφ = d + e, torej<br />
r<br />
sin φ<br />
φ = d<br />
d + e .<br />
f<br />
h = (1 − cos φ)r = 2 sin 2 ( φ<br />
2<br />
)d + e<br />
φ .<br />
Če vzamemo d = 75 in e = 0.005, potem dobimo φ = 0.01999953335176 in nato<br />
h = 0.75000749994107.<br />
Bor Plestenjak - Numerična analiza 2010
Večkratne ničle<br />
Za večkratne ničle velja pravilo, da za m kratno ničlo lahko pravilno izračunamo le 1/m<br />
decimalk, ki so na voljo. Tako npr. pri dvojni ničli dobimo le polovico, pri trojni ničli pa le<br />
tretjino točnih decimalk.<br />
Če vzamemo npr. f(x) = x 4 − 7x 3 + 18x 2 − 20x + 8 = (x − 1)(x − 2) 3 , dobimo s<br />
tangentno metodo in začetnim približkom <strong>2.</strong>1:<br />
1: <strong>2.</strong>067647058823931<br />
2: <strong>2.</strong>045564430808835<br />
3: <strong>2.</strong>030593755171017<br />
4: <strong>2.</strong>020495758352892<br />
5: <strong>2.</strong>013709272420485<br />
6: <strong>2.</strong>009160022769000<br />
7: <strong>2.</strong>006115892225148<br />
8: <strong>2.</strong>004081383953162<br />
. . . . .<br />
33: 1.999951585932835<br />
34: 1.999968259875404<br />
35: 1.999975900893329<br />
36: 1.999986096735057<br />
37: 1.999986096735057<br />
Bor Plestenjak - Numerična analiza 2010
Dogajanje v okolici večkratne ničle<br />
Poglejmo si računanje vrednosti polinoma<br />
x 9 − 18x 8 + 144x 7 − 672x 6 + 2016x 5 − 4032x 4 + 5376x 3 − 4608x 2 + 2304x − 512,<br />
ki je razčlenjen izraz (x − 2) 9 , v okolici točke <strong>2.</strong> Z Matlabom dobimo<br />
Bor Plestenjak - Numerična analiza 2010
Dogajanje v okolici večkratne ničle, <strong>2.</strong>del<br />
Napake niso povsem naključne, temveč tvorijo vzorec, ki ga opazimo, če pogledamo izračun<br />
pri prvih 2000 predstavljivih številih večjih od 2:<br />
Bor Plestenjak - Numerična analiza 2010
Sledenje implicitno podane funkcije<br />
Denimo, da bi radi narisali graf krivulje, ki je implicitno podana z enačbo f(x, y) = 0.<br />
Potrebujemo torej čim več točk (x i , y i ), za katere velja f(x i , y i ) = 0.<br />
Če je (x 0 , y 0 ) točka na krivulji, potem lahko pričakujemo, da se bo ob majhni spremembi<br />
x malo spremenil tudi y. Tu lahko uporabimo tangentno metodo, saj ima kvadratično<br />
konvergenco in vedno konvergira, če je začetni približek dovolj dober. Tako lahko kot<br />
začetni približek za f(x 0 + dx, y) = 0 vzamemo kar y 0 .<br />
Težave se pojavijo, kadar se funkcija obrača, ima večkratne točke in podobno. V teh<br />
primerih si lahko pomagamo z zamenjavo spremenljivk x in y. Kot kriterij za to, v katero<br />
smer naj se premikamo, lahko služita parcialna odvoda f po x in y.<br />
(x 0<br />
,y 0<br />
) (x 1 ,y 1 ) (x 2<br />
,y 2<br />
)<br />
(x 3<br />
,y 3<br />
)<br />
(x 4<br />
,y 4<br />
)<br />
Bor Plestenjak - Numerična analiza 2010<br />
f(x,y)=0
Zgled - sekularna enačba<br />
Pri računanju lastnih vrednosti simetrične matrike z metodo deli in vladaj je potrebno<br />
poiskati rešitve sekularne enačbe f(λ) = 0, kjer je<br />
f(λ) = 1 +<br />
n∑<br />
i=1<br />
u 2 i<br />
d i − λ .<br />
Velja d n < · · · < d 2 < d 1 in<br />
u i ≠ 0 za i = 1, . . . , n.<br />
Kako zgleda graf f(λ) Poli so v d i , asimptota je y = 1. Ker je f ′ (λ) = ∑ n<br />
i=1<br />
u 2 i<br />
(d i −λ) 2,<br />
je f med poli strogo naraščajoča. Ničle ležijo med poli, ena pa desno od zadnjega pola.<br />
Slika je za primer u = [0.03 0.05 0.05 0.03] in d = [1 2 3 4].<br />
Bor Plestenjak - Numerična analiza 2010
Sekularna enačba, <strong>2.</strong>del<br />
Navadne tangentne metode ne moremo uporabiti, saj so ničle lahko zelo blizu polov in<br />
bi potrebovali zelo dobre približke. Namesto aproksimacije funkcije s tangento zato raje<br />
uporabimo preprosto racionalno funkcijo, ki se prilega funkciji f.<br />
Denimo, da iščemo rešitev na intervalu (d i+1 , d i ), začetni približek pa je x r .<br />
poiščemo racionalno funkcijo oblike<br />
Sedaj<br />
h(λ) = c 1<br />
d i − λ + c 2<br />
d i+1 − λ + c 3,<br />
za katero velja h(x r ) = f(x r ) in f ′ (x r ) = h ′ (x r ).<br />
Enačba h(λ) = 0 ima dve rešitvi, za x r+1 pa vzamemo tisto, ki leži znotraj (d i+1 , d i ).<br />
Konvergenca je zelo hitra, saj h zelo dobro aproksimira f na intervalu (d i+1 , d i ).<br />
Bor Plestenjak - Numerična analiza 2010
Sekularna enačba, podrobnosti<br />
Zaradi stabilnosti razdelimo f na dva dela kot<br />
f(λ) = 1 +<br />
i∑<br />
k=1<br />
u 2 k<br />
d k − λ +<br />
n∑<br />
k=i+1<br />
u 2 k<br />
d k − λ =: 1 + ψ 1(λ) + ψ 2 (λ).<br />
To naredimo zato, da v vsoti za ψ 1 (λ) oziroma ψ 2 (λ) seštevamo enako predznačene člene.<br />
Sedaj določimo c 1 , c ′ 1 tako, da za h 1 (λ) = c 1<br />
d i − λ + c′ 1<br />
velja h 1 (x r ) = ψ 1 (x r ) in h ′ 1 (x r) = ψ ′ 1 (x r). Podobno določimo c 2 , c ′ 2<br />
tako, da za<br />
h 2 (λ) =<br />
c 2<br />
d i+1 − λ + c′ 2<br />
velja h 2 (x r ) = ψ 2 (x r ) in h ′ 2 (x r) = ψ ′ 2 (x r).<br />
iskana racionalna funkcija.<br />
Sedaj je h(λ) = 1 + h 1 (λ) + h 2 (λ)<br />
Bor Plestenjak - Numerična analiza 2010