Minimalizace kvadratické funkce s kvadratickými ... - FEI VŠB

Minimalizace kvadratické funkce s kvadratickými ... - FEI VŠB Minimalizace kvadratické funkce s kvadratickými ... - FEI VŠB

22.11.2014 Views

26 Porovnáním uhlů lze úpravou získat předpis cos ϕ z = cos ϕ p (z, x) (p, x) = ‖z‖.‖x‖ ‖p‖.‖x‖ z ‖z‖ = p ‖p‖ p = ‖p‖ ‖z‖ .z Velikost polohového vektoru ‖p‖ je ve skutečnosti poloměr kružnice, která je popsaná kvadratickou vazbou Tedy předpis projekce je p = Algoritmus v matlabu: Ω = {x = (x, y) : x 2 + y 2 = c, c ∈ R} √ c ‖z‖ .z function [P] = na kruznici(Z,r) % function [P] = na kruznici(Z,r) % % funkce zobrazi dany bod na bod, ktery % lezi na kruznici % % P ... reseni % Z ... vstupni bod % r ... polomer kruznice % P = (sqrt(r) /norm(Z))∗Z; Algoritmus v matlabu: Výpis 5: Algoritmus projekce bodu na kružnici function [reseni] = minimum(A,b,c,bod0,e) % function [reseni] = minimum(A,b,bod0,e) % % reseni ... reseni % % A ... matice soustavy (2x2, pozitivne definitni , symetricka) % b ... vektor pravych stran % c ... kvadrat polomeru kruznice % bod0 ... pocatecni aproximace % e ... pozadovana presnost bod=na kruznici(bod0,sqrt(c)); % pocatecni aproximace nemusi lezet na kruznici zkracovac=1; gradient=(b−A∗bod); % pozn. jedna se o −grad

27 while (norm(gradient)>e) % presnost reseni lze urcit podle delky gradientu (je iteracne skracovan) stare z=vrat z(bod,A,b); % hodnota funkce pro stary bod gradient=(b−A∗bod)∗zkracovac; nove z=vrat z(na kruznici(bod+gradient,sqrt(c)),A,b); % hodnota funkce pro novy bod while (nove z > stare z) zkracovac=zkracovac/2; nove z=vrat z(na kruznici(bod+gradient∗zkracovac,1),A,b); end; bod=na kruznici(bod+gradient∗zkracovac,sqrt(c)); end reseni=[bod(1) bod(2) vrat z (bod,A,b)]; Výpis 6: Algoritmus metody největšího spádu s projekcí na množinu 4.3.5 Příklady použití metody největšiho spádu s projekcí na množinu f(x) = 1 (Ax, x) − (b, x) (12) 2 Ω = {(x, y) ∈ R 2 : x 2 + y 2 = c} (13) Příklad 4.5 Minimalizujte kvadratickou funkci (12) vzhledem k množině (13), pokud A = V matlabu zavoláme funkci (6) >> A = [2 −1; −1 2] A = 2 −1 −1 2 >> b = [1; 1] b = 1 [ 2 −1 −1 2 ] [ 1 , b = 1 ] , c = 1

27<br />

while (norm(gradient)>e) % presnost reseni lze urcit podle delky gradientu (je iteracne<br />

skracovan)<br />

stare z=vrat z(bod,A,b); % hodnota <strong>funkce</strong> pro stary bod<br />

gradient=(b−A∗bod)∗zkracovac;<br />

nove z=vrat z(na kruznici(bod+gradient,sqrt(c)),A,b); % hodnota <strong>funkce</strong> pro novy bod<br />

while (nove z > stare z)<br />

zkracovac=zkracovac/2;<br />

nove z=vrat z(na kruznici(bod+gradient∗zkracovac,1),A,b);<br />

end;<br />

bod=na kruznici(bod+gradient∗zkracovac,sqrt(c));<br />

end<br />

reseni=[bod(1) bod(2) vrat z (bod,A,b)];<br />

Výpis 6: Algoritmus metody největšího spádu s projekcí na množinu<br />

4.3.5 Příklady použití metody největšiho spádu s projekcí na množinu<br />

f(x) = 1 (Ax, x) − (b, x) (12)<br />

2<br />

Ω = {(x, y) ∈ R 2 : x 2 + y 2 = c} (13)<br />

Příklad 4.5<br />

Minimalizujte kvadratickou funkci (12) vzhledem k množině (13), pokud<br />

A =<br />

V matlabu zavoláme funkci (6)<br />

>> A = [2 −1; −1 2]<br />

A =<br />

2 −1<br />

−1 2<br />

>> b = [1; 1]<br />

b =<br />

1<br />

[ 2 −1<br />

−1 2<br />

] [ 1<br />

, b =<br />

1<br />

]<br />

, c = 1

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

Saved successfully!

Ooh no, something went wrong!