24.01.2015 Views

2. Nelinearne enačbe

2. Nelinearne enačbe

2. Nelinearne enačbe

SHOW MORE
SHOW LESS
  • 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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!