12
Optimizacija - Matlab Modeliranje sistema na digitalnim računarima

M1 Optimizacija - Matlab

  • Upload
    mexx007

  • View
    68

  • Download
    2

Embed Size (px)

Citation preview

Page 1: M1 Optimizacija - Matlab

Optimizacija - Matlab Modeliranje sistema na digitalnim računarima

Page 2: M1 Optimizacija - Matlab

Funkcionalnost • Optimization toolbox sadrži funkcije na numeričku optimizaciju:

– Traženje minimuma nelineane funkcije

– Nelinearna minimizacija multi-objektivne funkcije

– Primena metode najmanjih kvadrata na linearne i nelinearne probleme

– Traženje nula nelinearnog problema i rešavanje jednačina

– Minimizacija matričnih problema • Linearno, kvadratno i binarno programiranje

Page 3: M1 Optimizacija - Matlab

Traženje minimuma nelineane funkcije • fminbnd - traženje minimuma funkcije jedne promenljive u

zadatom intervalu.

• fmincon – nalazi minimum funkcije više promenljivih sa ograničenjima.

• fminsearch – nalazi minimum funkcije više promenljivih bez ograničenja upotrebom Nelder-Mead direktnog metoda.

• fminunc – nalazi minimum funkcije više promenljivih bez ograničenja.

• fseminf - nalazi minimum funkcije više promenljivih sa semi-infinite ograničenjima.

Page 4: M1 Optimizacija - Matlab

Min f-je jedne promenljive u zadatom intervalu

Primer 1: Traženje minimuma f-je f(x)=sin(x) na intervalu [0, 2].

Primer 2: Traženje minimuma f-je f(x)=(x-3)2-1 na intervalu [0, 5].

>> x = fminbnd(@sin, 0, 2*pi) x = 4.7124 >> sin(x) ans = -1.0000 >> provera = 3*pi/2 provera = 4.7124

>> f = @(x) (x-3)^2-1; >> xmin = fminbnd(f, 0, 5) xmin = 3 >> fmin = f(xmin) fmin = -1

Page 5: M1 Optimizacija - Matlab

Min f-je više promenljivih sa ograničenjima

Primer: nadi x koje daje min funkcije f(x)=-x1x2x3 polazedi iz tačke (10, 10, 10) tako da bude ispunjeno ograničenje 0 ≤ x1+2x2+2x3 ≤ 72.

Rešenje: ograničenja je potrebno napisati u obliku Ax ≤ b, tj.

-x1-2x2-2x3 ≤ 0 i

x1+2x2+2x3 ≤ 72.

>> fopt = @(x) -x(1)*x(2)*x(3); >> A = [-1 -2 -2; 1 2 2]; >> b = [0; 72]; >> x0 = [10; 10; 10]; >> [xmin,fmin] = fmincon(fopt,x0,A,b) xmin = 24.0000 12.0000 12.0000 fmin = -3.4560e+003 >> A*xmin-b ans = -72 0

Page 6: M1 Optimizacija - Matlab

Min f-je više promenljivih bez ograničenja

Primer 1: nadi minimum funkcije f(x)=sin(x)+3 u okolini tačke 2.

Primer 2: nadi minimum funkcije f(x)=3x1

2+2x1x2+x22 u okolini

tačke (1,1).

>> f = @(x) sin(x)+3; >> xmin = fminsearch(f, 2) xmin = 4.7124

>> f=@(x) 3*x(1)^2+2*x(1)*x(2)+x(2)^2; >> [xmin,fmin] = fminunc(f,[1;1]) xmin = 1.0e-006 * 0.2541 -0.2029 fmin = 1.3173e-013 >> [xmin,fmin] = fminsearch(f,[1;1]) xmin = 1.0e-004 * -0.0675 0.1715 fmin = 1.9920e-010

Page 7: M1 Optimizacija - Matlab

Min f-je više promenljivih bez ograničenja (2)

Primer 2: (isti primer)

Rešenje koristi gradijent f-je cilja.

function [f,g] = mojaf(x) f = 3*x(1)^2+2*x(1)*x(2)+x(2)^2; g = [ 6*x(1)+2*x(2) 2*x(1)+2*x(2) ];

>> options = optimset('GradObj','on'); >> x0 = [1; 1]; >> [xmin,fmin]=fminunc(@mojaf,x0,options) Optimization terminated: first-order optimality less than OPTIONS.TolFun, and no negative/zero curvature detected in trust region model. xmin = 1.0e-015 * 0.1110 -0.8882 fmin = 6.2862e-031

Page 8: M1 Optimizacija - Matlab

Min f-je više promenljivih bez ograničenja (3)

>> options = optimset('GradObj','on','Display','iter'); >> [xmin,fmin]=fminunc(@mojaf,x0,options); Norm of First-order Iteration f(x) step optimality CG-iterations 0 6 8 1 6.28624e-031 1.41421 1.55e-015 1 Optimization terminated: first-order optimality less than OPTIONS.TolFun, and no negative/zero curvature detected in trust region model. >> options = optimset('GradObj','off','Display','iter'); >> [xmin,fmin] = fminunc(@mojaf,x0,options); Warning: Gradient must be provided for trust-region method; using line-search method instead. > In fminunc at 354 First-order Iteration Func-count f(x) Step-size optimality 0 3 6 8 1 6 0.25 0.125 1 2 9 0.0805763 1 0.389 3 12 0.0510334 1 0.276 4 15 0.00234029 1 0.158 5 18 0.000114716 1 0.0366 6 21 3.44139e-007 1 0.00116 7 24 9.1273e-010 1 4.45e-005 8 27 1.31733e-013 1 1.16e-006 Optimization terminated: relative infinity-norm of gradient less than options.TolFun. >>

Page 9: M1 Optimizacija - Matlab

Min f-je više promenljivih bez/sa ograničenja (4)

>> [xmin,fmin]=fminsearch(@mojaf,x0,options); Iteration Func-count min f(x) Procedure 0 1 6 1 3 6 initial simplex 2 5 5.52062 expand 3 7 4.91391 expand 4 9 3.86566 expand 5 11 2.52517 expand 6 13 1.31047 expand 7 15 0.973674 reflect 8 17 0.973674 contract outside 9 19 0.973674 contract inside 10 21 0.973674 contract outside 11 23 0.795334 expand 12 25 0.736819 expand 13 27 0.361494 expand 14 28 0.361494 reflect ... 44 86 1.6625e-009 contract inside 45 87 1.6625e-009 reflect 46 89 1.992e-010 contract inside Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-004

Page 10: M1 Optimizacija - Matlab

Traženje nula funkcije • fzero – traženje nula nelinearne

funkcije jedne promenljive.

Primer 1: Nula sinus funkcije u okolini 3.

Primer 2: Nula kosinus funkcije u intervalu [1 2].

Primer 3: nula polinoma u okolini 2.

>> x = fzero(@sin, 3) x = 3.1416

>> x = fzero(@cos, [1 2]) x = 1.5708

>> f = @(x) x.^3-2*x-5; >> x = fzero(f, 2) x = 2.0946 >> roots([1 0 -2 -5]) ans = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i

Page 11: M1 Optimizacija - Matlab

Rešavanje jednačina • fsolve – rešava sistem nelinearnih jednačina.

Primer: nadi rešenje nelinearnih jednačina polazedi iz tačke (-5, -5).

2x1-x2=e-x1, -x1+2x2=e-x2

>> f = @(x) [ 2*x(1)-x(2)-exp(-x(1)) -x(1)+2*x(2)-exp(-x(2)) ]; >> [x,fval] = fsolve(f,[-5;-5]) Optimization terminated: first-order optimality is less than options.TolFun. x = 0.5671 0.5671 fval = 1.0e-006 * -0.4059 -0.4059

Page 12: M1 Optimizacija - Matlab

Linearno programiranje • linprog – nalazi minimum linearnog problema sa linearnim

ograničenjima tipa jednakosti i nejednakosti.

Primer: nadi x za

min f(x)=-5x1-4x2-6x3

uvažavajudi ograničenja:

x1-x2+x3 ≤ 20

3x1+2x2+4x3 ≤ 42

3x1+2x2 ≤ 30

x1,x2,x3 ≥ 0

>> f = [-5; -4; -6]; >> A = [1 -1 1 3 2 4 3 2 0]; >> b = [20; 42; 30]; >> bdonje = [0; 0; 0]; >> [x,fval] = linprog(f,A,b,[],[],bdonje) Optimization terminated. x = 0.0000 15.0000 3.0000 fval = -78.0000

[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,LB,UB,X0,OPTIONS)