08.08.2013 Views

Ólínuleg bestun (REI202M) Heimadæmi 3

Ólínuleg bestun (REI202M) Heimadæmi 3

Ólínuleg bestun (REI202M) Heimadæmi 3

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Ólínuleg</strong> <strong>bestun</strong> (<strong>REI202M</strong>)<br />

<strong>Heimadæmi</strong> 3<br />

Alexander Jensen Hjálmarsson<br />

Einar Bragi Árnason<br />

27.01.2012


<strong>Ólínuleg</strong> <strong>bestun</strong> <strong>Heimadæmi</strong> 3 27.01.2012<br />

Dæmi 1<br />

Sjáum að ákvörðunarbreyturnar eru xi og yi. Setjum upp <strong>bestun</strong>arlíkan:<br />

Skorðurnar:<br />

Dæmi 2<br />

a)<br />

min<br />

Byrjum á að reikna stigulinn:<br />

Finnum h:<br />

∇g(x) =<br />

4<br />

i=1<br />

<br />

(xi − x0) 2 + (yi − y 2 )<br />

(x1 − 1) 2 + (y1 − 4) 2 = 4<br />

(x2 − 9) 2 + (y2 − 5) 2 = 1<br />

2 ≤ x3 ≤ 4<br />

−1 ≤ y3 ≤ −3<br />

6 ≤ x4 ≤ 8<br />

−2 ≤ y4 ≤ 2<br />

∂g(x)<br />

∂x1<br />

∂g(x)<br />

∂x2<br />

h = ∇g(x0) =<br />

<br />

2x1 − x2 − 1<br />

=<br />

2x2 − x1<br />

−1<br />

3<br />

Vitum að við finnum φ(α) með jöfnunni: φ(α) = g(x0 + αh)<br />

Stingum inn í jöfnuna:<br />

b)<br />

φ(α) = g([1, 2] T − α[−1, 3] T ) = 13α 2 − 10α + 2<br />

Þurfum að byrja á að diffra φ(α):<br />

Finna þá y(α):<br />

<br />

φ ′ (α) = h T ∇g(x0 + αh)<br />

y(α) = φ(0) + β1φ ′ ((0)α = 2 − 2α<br />

2


<strong>Ólínuleg</strong> <strong>bestun</strong> <strong>Heimadæmi</strong> 3 27.01.2012<br />

c)<br />

d)<br />

Skilyrði 1:<br />

φ(0, 5) = 0, 25<br />

λ(0, 5) = 2 + (0, 2)(−10)(0, 5) = 1<br />

φ(0, 5) < λ(0, 5) → 0, 25 < 1<br />

Þannig við sjáum að skilyrði 1 er uppfyllt.<br />

Skilyrði 2:<br />

φ ′ (0, 5) = 3<br />

φ ′ (0) = −10<br />

φ ′ (0, 5) ≥ (0, 5)(−10) → 0, 5 ≥ −5<br />

Sjáum því að bæði skilyrði 1 og 2 eru uppfyllt.<br />

Dæmi 3<br />

a)<br />

Byrjum á að reikna stigulinn og hessian fylkið:<br />

<br />

∂f(x)<br />

∇f(x) =<br />

<br />

3 x1 − 7x<br />

=<br />

2 1 + 12x1<br />

<br />

∂x1<br />

∂f(x)<br />

∂x2<br />

3<br />

x2


<strong>Ólínuleg</strong> <strong>bestun</strong> <strong>Heimadæmi</strong> 3 27.01.2012<br />

∇ 2 f(x) =<br />

∂ 2 f(x)<br />

∂x1∂x1<br />

∂ 2 f(x)<br />

∂x2∂x1<br />

∂ 2 f(x)<br />

∂x1∂x2<br />

∂ 2 f(x)<br />

∂x2∂x2<br />

<br />

=<br />

3x 2 1 − 14x1 + 12 0<br />

0 1<br />

Stingum núllpunktinum inn í ∇2f(x0) og fáum:<br />

∇ 2 f(x0) = ∇ 2 <br />

−4<br />

f(2, 1) =<br />

0<br />

0<br />

1<br />

<br />

Þá getum við fundið h með því að stinga inn í jöfnuna:<br />

Fáum h1 = 1 og h2 = − 1<br />

2 .<br />

∇ 2 f(x)h = −∇f(x)<br />

Reiknum x1 = x0 + h = [2, 1] T + [1, − 1<br />

2 ]T = [3, 1<br />

2 ]T<br />

Stingum x1 inn í stigulinn:<br />

∇f(x1) = [0, 1<br />

2 ]T<br />

Sjáum greinilega að þetta er ekki hvarfpunktur þar sem þetta er ekki [0,0] T .<br />

b)<br />

Skrifuðum forrit í Matlab til þess að ýtra:<br />

1 x = [ 2 ] ’ ;<br />

2 x1 = 2 ;<br />

3 eps = 1 ;<br />

4 k = 1 ;<br />

5<br />

6 while k ~= 500<br />

7<br />

8 alpha = 1/(2^( k +1));<br />

9 x1 = x ;<br />

10 g r a d f = [ x ] ;<br />

11 s t e f n a = −g r a d f ;<br />

12<br />

13 x = x1+alpha ∗ s t e f n a ;<br />

14<br />

15<br />

16 k = k+1;<br />

17<br />

18 end<br />

Ef við keyrum forritið má sjá að upp úr ítrun 10 fer gildið okkar að festast í<br />

kringum ≈ 1, 55 þrátt fyrir að núllstöðin sé 0.<br />

4


<strong>Ólínuleg</strong> <strong>bestun</strong> <strong>Heimadæmi</strong> 3 27.01.2012<br />

Dæmi 4<br />

Löguðum sýnidæmið úr qclinsea.m frá Kristjáni að okkar þörfum:<br />

1 % AN EXAMPLE (MINIMIZE ROSENBROCK’ S<br />

2 % FUNCTION WITH THE STEEPEST DESCENT METHOD)<br />

3 function hd34<br />

4 x = [ −3; 3 ] ;<br />

5 opts . sigma = 0 . 1 ;<br />

6 [ fx , gx ] = q c l i n s e a ( ’ i n i t ’ , @rosbrk , x , opts ) ;<br />

7 k = 0 ;<br />

8 i = 2 ;<br />

9 while norm( gx ) > 1e−3<br />

10 s = −gx ;<br />

11<br />

12 [ fa , ga , n i f g , alpha ] = q c l i n s e a ( x , s , fx , gx ) ;<br />

13<br />

14 i f rem( k,2)==0 %Oddatoludot<br />

15 x ( 2 ) = x ( 2 ) + alpha ∗ s ( 2 ) ;<br />

16 i = i −1;<br />

17 else<br />

18 x ( 1 ) = x ( 1 ) + alpha ∗ s ( 1 ) ;<br />

19 i = i +1;<br />

20 end<br />

21<br />

22 x<br />

23<br />

24 f x = f a ;<br />

25 gx = ga ;<br />

26 k = k+1;<br />

27<br />

28 end<br />

29 f p r i n t f ( ’ S o l u t i o n : ␣x1=%.5 f ␣x2=%.5f ,<br />

30 ␣␣␣␣␣␣␣␣␣␣␣␣ ␣␣ ␣␣ n i t e r=%d␣ nf=%d␣ng=%d\n ’ , x , n i f g )<br />

31 end<br />

32<br />

33 function [ f , g ] = r o s b r k ( x )<br />

34 f = x (1).^2+ x ( 2 ) . ^ 2 ;<br />

35 i f nargout > 1<br />

36 g ( 1 , 1 ) = 2∗x ( 1 ) ;<br />

37 g ( 2 , 1 ) = 2∗x ( 2 ) ;<br />

38 end<br />

39 end<br />

Settum inn if setningu í línum 14-20 sem sá til þess að við héldum annari<br />

breytunni fastri í hverri ítrun. Forritið að ofan er fyrir fallið f(x) = x 2 1 + x 2 2, en<br />

fyrir b-liðinn notum við sama forrit nema breytum fallinu og stiglinum í línum<br />

33-37.<br />

Með notkun forritsins fundum gekk okkur ágætlega að finna núllstöð á fallinu<br />

í b-lið en virkar mjög illa fyrir fallið í a-lið. Þetta tengist því að α gildið<br />

okkar og stöðvunar skilyrðið gera það að verkum að það hættir eftir eina ítrun.<br />

Þegar við breyttum α gildinu í fasta (t.d. 0,2) og ítruðum í 1000 skipti komumst<br />

við mjög nálægt lággildi.<br />

5

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

Saved successfully!

Ooh no, something went wrong!