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