drugi izvestaj

  • Upload
    dimacar

  • View
    232

  • Download
    0

Embed Size (px)

Citation preview

  • 8/3/2019 drugi izvestaj

    1/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 0 -

    Metodi optimizacije

    Drugi izvetaj

    Primenjene numerike metode korienjem

    programskog paketa Matlab

    Dositej ajinovi 1173/10

    Profesor: Boirar Rosi Datum: 12.12.2011

  • 8/3/2019 drugi izvestaj

    2/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 1 -

    SADRAJ

    1. Newton-Raphson metoda 22. Nelder-Mead metoda 5

    3. Metoda seice 11

    4. Metoda zlatnog preseka 16

    5. Metoda polovljenja intervala 17

    6. Metoda parabole 19

    7. Regula-Falsi metoda 21

    8. Literatura 22

  • 8/3/2019 drugi izvestaj

    3/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 2 -

    1. Newton-Raphson metodafunction x = newton(f_str,df_str,x0,n)f = inline(f_str);df = inline(df_str);disp('Broj iteracija =')disp(0)x = x0;xn = 0;disp('Xn =')disp(x)disp('f(x) =')disp(f(x))disp('f''(x) =')disp(df(x))for i = 1:n

    xn = x - (f(x)/df(x));if x == xn

    disp('Ovo je najvisa postignuta tacnost')i = i-1;break

    endx = [-10.0:0.01:10.0];

    plot(x,f(x));x = xn;disp('Broj iteracija =')disp(i)disp('Xn =')disp(x)disp('f(x) =')disp(f(x))disp('f''(x) =')disp(df(x))enddisp('Broj izvrsenih iteracija:')disp(i)end

    Napomena: funkcija se u komandnom prozoru unosi na sledei nain:

    newton(funkcija',prvi izvod funkcije',prva procena,broj iteracija)

    npr: newton('sin(x/3)+cos(x/2)','1/6*(2*cos(x/3)-3*sin(x/2))',0.1,10)

  • 8/3/2019 drugi izvestaj

    4/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 3 -

    Prikaz reenja:

    Broj iteracije =

    0

    Xn =

    0.1000

    f(x) =

    1.0321

    f'(x) =

    0.3082

    Broj iteracije =

    1

    Xn =

    -3.2492

    f(x) =

    -0.9372

    f'(x) =

    0.6555

    Broj iteracije =

    2

    Xn =

    -1.8195

    f(x) =

    0.0440

    f'(x) =

    0.6686

    Broj iteracije =

    3

  • 8/3/2019 drugi izvestaj

    5/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 4 -

    Xn =

    -1.8852

    f(x) =

    -1.8890e-004

    f'(x) =

    0.6742

    Broj iteracije =

    4

    Xn =

    -1.8850

    f(x) =

    -3.2034e-009

    f'(x) =

    0.6742

    Broj iteracije =

    5

    Xn =

    -1.8850

    f(x) =

    -2.2204e-016

    f'(x) =

    0.6742

    Broj iteracije =

    6

    Xn =

    -1.8850

    f(x) =

    0

    f'(x) =

    0.6742

    Ovo je najvisa postignuta tacnost

  • 8/3/2019 drugi izvestaj

    6/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 5 -

    Broj izvrsenih iteracija:

    6

    ans =

    -1.8850

    Slika 3a: Grafiki prikaz reenja

    2. Metoda Nelder-Meadfunction [ x_opt, n_feval ] = nelder_mead ( x, function_handle,flag )

    % Autor:%% Jeff Borggaard%% Parametri:

  • 8/3/2019 drugi izvestaj

    7/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 6 -

    %% Ulaz, realni X (M+1,M) koji predstavljaju tacke koje sluze za% pretpostavljanje pocetnih vrednosti resenja. Ako je dimenzijaprostora% M, onda matrica mora sadrzati M+1 tacaka. Na primer, za 2Dprostor

    % moraju se dati tri tacke. Svaki red matrice predstavlja jednutacku;% za ravan ovo znaci da bi X bila matrica dimenzije 3x2.%% Input, handle FUNCTION_HANDLE, izraz funkcije pod navodnicima,% ili ime M-filea koji definise funkciju, sa znakom "@" kojiprethodi% funkciji.%% Ulaz, logicki indikator koji je opcioni argument. Ako jeprisutan, i% postavljen na 1 program ce pokazaci graficku sliku konture iproceduru% pronalazenja resenja. Ovo samo ima smisla za dvodimenzionalne% probleme, odnosno za N=2.%% Izlaz, realan X_OPT, optimalna vrednost X-a pronadjenog pomocualgoritma.

    rho = 1; % rho > 0xi = 2; % xi > max(rho, 1)gam = 0.5; % 0 < gam < 1sig = 0.5; % 0 < sig < 1

    tolerance = 1e-6;max_feval = 250;

    % Initialization[temp,n_dim] = size(x);

    if (temp-n_dim ~= 1)fprintf ( 1, '\n' );fprintf ( 1, 'NELDER_MEAD - Fatal error!\n' );error('number of points must be = number of design variables +

    1\n');end

    if (nargin==2)flag = 0;

    end

    if (flag)xp = linspace(-5,5,101);yp = xp;for i=1:101for j=1:101fp(j,i) = feval(function_handle,[xp(i),yp(j)]);

    endend

  • 8/3/2019 drugi izvestaj

    8/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 7 -

    figure(27)hold oncontour(xp,yp,fp,linspace(0,200,25))

    if (flag)

    plot(x(1:2,1),x(1:2,2),'r')plot(x(2:3,1),x(2:3,2),'r')plot(x([1 3],1),x([1 3],2),'r')pauseplot(x(1:2,1),x(1:2,2),'b')plot(x(2:3,1),x(2:3,2),'b')plot(x([1 3],1),x([1 3],2),'b')

    end

    end

    index = 1:n_dim+1;

    [f ] = evaluate(x,function_handle);n_feval = n_dim + 1;

    [f,index] = sort ( f );x = x(index,:);

    %% Begin the Nelder Mead iteration.%converged = 0;diverged = 0;

    while ( ~converged & ~diverged )%

    % Compute midpoint of simplex opposite worst point.%

    x_bar = sum(x(1:n_dim,:)) / n_dim;%% Compute reflection point.%

    x_r = (1+rho)*x_bar - rho*x(n_dim+1,:);f_r = feval(function_handle,x_r); n_feval = n_feval+1;

    %% Accept the point:%

    if (f(1)

  • 8/3/2019 drugi izvestaj

    9/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 8 -

    x_e = (1+rho*xi)*x_bar - rho*xi*x(n_dim+1,:);f_e = feval(function_handle,x_e); n_feval = n_feval+1;

    if (f_e

  • 8/3/2019 drugi izvestaj

    10/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 9 -

    % test for divergence%

    diverged = n_feval>max_feval;

    if (flag)plot(x(1:2,1),x(1:2,2),'r')

    plot(x(2:3,1),x(2:3,2),'r')plot(x([1 3],1),x([1 3],2),'r')pauseplot(x(1:2,1),x(1:2,2),'b')plot(x(2:3,1),x(2:3,2),'b')plot(x([1 3],1),x([1 3],2),'b')

    endend

    if ( 0 )fprintf('The best point x^* was: %d %d\n',x(1,:));fprintf('f(x^*) = %d\n',f(1));

    end

    x_opt = x(1,:);

    if ( diverged )fprintf ( 1, '\n' );fprintf ( 1, 'NELDER_MEAD - Warning!\n' );fprintf ( 1, ' The maximum number of function evaluations was

    exceeded\n')fprintf ( 1, ' without convergence being achieved.\n' );

    end

    return

    endfunction f = evaluate(x,function_handle);

    %*****************************************************************************80%%% EVALUATE handles the evaluation of the function at each point.%[temp,n_dim] = size(x);

    f = zeros(1,n_dim+1);

    for i=1:n_dim+1

    f(i) = feval(function_handle,x(i,:));end

    returnendfunction [ x, f ] = shrink(x,function_handle,sig)

    %*****************************************************************************80

  • 8/3/2019 drugi izvestaj

    11/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 10 -

    %%% SHRINK ...%% In the worst case, we need to shrink the simplex along each edgetowards% the current "best" point. This is quite expensive, requiring

    n_dim new% function evaluations.

    [temp,n_dim] = size(x);

    x1 = x(1,:);f(1) = feval(function_handle,x1);

    for i=2:n_dim+1x(i,:) = sig*x(i,:) + (1-sig)*x(1,:);f(i ) = feval(function_handle,x(i,:));

    end

    returnend

    Ova funkcija se moe uneti argumentima u komandnom prozoru:

    nelder_mead ( x, function_handle, flag )

    A priloena je i posebna funkcija (example.m) u kojoj bismo mi definisali samu funkciju cilja:

    function f = example ( x )f = ( tan(x(1))^2 + x(2)^2);

    Pozivanje funkcije nelder_mead.m, uz samu funkciju kao parametar definisan u example.m

    vri se pokretanjem fajla pozivanje.m koji mora biti u istom folderu kao i dva navedena.n=2;x_init=[3, -3; 2, -4; -1, -2];x_opt = nelder_mead ( x_init, @example, 1 )

    to znai - optimizacija vrednosti x-a vri se nelder_mead metodom definisanom u svom fajlu, sainicijalnom vrednou x-a (x_init) koju smo sami pretpostavili (x_init=[3, -3; 2, -4; -1, -2]),

  • 8/3/2019 drugi izvestaj

    12/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 11 -

    uzevi izraz funkcije cilja definisane u svom fajlu (@example), setovanjem indikatora na 1, imepotvrujemo da elimo plotovanje grafikog prikaza.

    Reenje:

    x_opt =

    1.5679 -3.7949

    Slika 2: Grafiki prikaz konvergiranja ka reenju

    3. Metoda seice

    % Funkcija u f(x) = 0f = inline('x^5-0.2*x^3+2.7*10^(-4)');% Prva pretpostavkaxguess1 = 0.05;% Druga pretpostavkaxguess2 = 0.02;

  • 8/3/2019 drugi izvestaj

    13/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 12 -

    % Donja granica x-alxrange = -0.02;% Gornja granica x-auxrange = 0.12;

    % Resenje:

    maxi = f(lxrange);mini = f(lxrange);for i=lxrange:(uxrange-lxrange)/10:uxrange

    if f(i) > maximaxi = f(i);

    endif f(i) < mini

    mini = f(i);end

    endtot=maxi-mini;mini=mini-0.1*tot;

    maxi=maxi+0.1*tot;

    % Racunanje velicine prozora za figureset(0,'Units','pixels')scnsize = get(0,'ScreenSize');wid = round(0.5*scnsize(3));hei = round(0.5*scnsize(4));wind = [1, 1, wid, hei];

    % Graf funkcije i dve linije koje predstavljaju prve dve pretpostavkefigure('Position',wind)clffplot(f,[lxrange,uxrange])hold onplot([xguess1,xguess1],[maxi,mini],'g','linewidth',2)plot([xguess2,xguess2],[maxi,mini],'g','linewidth',2)plot([lxrange,uxrange],[0,0],'k','linewidth',1)title('Uneta funkcija na zadatom intervalu sa pretpostavljenim resenjima')

    hold off

  • 8/3/2019 drugi izvestaj

    14/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 13 -

    Slika 3: Prikaz unete f-je u pretpostavke

    % Prva iteracijafigure('Position',wind)x1 = xguess2-(f(xguess2)*(xguess1-xguess2))/(f(xguess1)-f(xguess2));ea=abs((x1-xguess2)/x1)*100;m=(f(xguess2)-f(xguess1))/(xguess2-xguess1);b=f(xguess2)-m*xguess2;lefty=(maxi-b)/m;righty=(mini-b)/m;

    clfsubplot(2,1,2),fplot(f,[lxrange,uxrange])hold on

    plot([x1,x1],[maxi,mini],'b','linewidth',2)plot([xguess1,xguess1],[maxi,mini],'g','linewidth',2)plot([xguess2,xguess2],[maxi,mini],'g','linewidth',2)plot([lxrange,uxrange],[0,0],'k','linewidth',1)plot([lefty,righty],[maxi,mini],'r','linewidth',2)title('Uneta funkcija na zadatom intervalu sa gornjim i donjim granicama')

    subplot(2,1,1), text(0,1,['Iteracija 1'])text(0.1,.8,['x1 = xguess2-(f(xguess2)*(xguess1-xguess2))/(f(xguess1)-f(xguess2)) = ',num2str(x1)])text(0,.4,['Apsolutna relativna aproksimativna greska'])text(0.1,.2,['ea = abs((x1 - xguess2) / x1)*100 = ',num2str(ea),'%'])axis off

    hold off

  • 8/3/2019 drugi izvestaj

    15/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 14 -

    Slika 4: Prva iteracija

    % Druga iteracija

    figure('Position',wind)x0=xguess2;x2 = x1-(f(x1)*(x0-x1))/(f(x0)-f(x1));ea=abs((x2-x1)/x2)*100;m=(f(x1)-f(x0))/(x1-x0);b=f(x1)-m*x1;lefty=(maxi-b)/m;righty=(mini-b)/m;

    clfsubplot(2,1,2),fplot(f,[lxrange,uxrange])hold onplot([x2,x2],[maxi,mini],'b','linewidth',2)

    plot([x0,x0],[maxi,mini],'g','linewidth',2)plot([x1,x1],[maxi,mini],'g','linewidth',2)plot([lxrange,uxrange],[0,0],'k','linewidth',1)plot([lefty,righty],[maxi,mini],'r','linewidth',2)title('Uneta funkcija na zadatom intervalu sa gornjim i donjim granicama')

    subplot(2,1,1), text(0,1,['Iteracija 2'])text(0.1,.8,['x2 = x1-(f(x1)*(x0-x1))/(f(x0)-f(x1)) = ',num2str(x2)])text(0,.4,['Apsolutna relativna aproksimativna greska'])text(0.1,.2,['ea = abs((x2 - x1) / x2)*100 = ',num2str(ea),'%'])axis offhold off

  • 8/3/2019 drugi izvestaj

    16/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 15 -

    Slika 5: Druga iteracija

    % Treca iteracijafigure('Position',wind)

    x3 = x2-(f(x2)*(x1-x2))/(f(x1)-f(x2));ea=abs((x3-x2)/x3)*100;m=(f(x2)-f(x1))/(x2-x1);b=f(x2)-m*x2;lefty=(maxi-b)/m;righty=(mini-b)/m;

    clfsubplot(2,1,2),fplot(f,[lxrange,uxrange])hold onplot([x3,x3],[maxi,mini],'b','linewidth',2)plot([x1,x1],[maxi,mini],'g','linewidth',2)plot([x2,x2],[maxi,mini],'g','linewidth',2)plot([lxrange,uxrange],[0,0],'k','linewidth',1)plot([lefty,righty],[maxi,mini],'r','linewidth',2)title('Uneta funkcija na zadatom intervalu sa gornjim i donjim granicama')

    subplot(2,1,1), text(0,1,['Iteracija 3'])text(0.1,.8,['x3 = x2-(f(x2)*(x1-x2))/(f(x1)-f(x2)) = ',num2str(x3)])text(0,.4,['Apsolutna relativna aproksimativna greska'])text(0.1,.2,['ea = abs((x3 - x2) / x3)*100 = ',num2str(ea),'%'])axis offhold off

  • 8/3/2019 drugi izvestaj

    17/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 16 -

    Slika 5: Trea iteracija

    4. Metoda Zlatnog preseka

    f = inline('cos(2*x) + exp(x)');x = linspace(.5,1, 101);plot(x, f(x))N = 10;a0 = .5 ; b0 = 1;r = (sqrt(5)-1)/2;

    alist = zeros(N,1);blist = zeros(N,1);a = a0; b = b0;s = a + (1-r)*(b-a);t = b - (1-r)*(b-a);f1 = f(s);f2 = f(t);for n = 1:N

    if f1 < f2b = t;t = s;s = a+(1-r)*(b-a);f2 = f1; f1 = f(s);

    elsea = s;s = t;t = b-(1-r)*(b-a);f1 = f2;

  • 8/3/2019 drugi izvestaj

    18/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 17 -

    f2 = f(t);endalist(n) = a;blist(n) = b;

    enddisp(' a b f(a) f(b) b-a ')

    disp(' ')alist = [a0;alist];blist = [b0; blist];[alist, blist, f(alist), f(blist), blist-alist]

    Slika 6. Plotovanje reenja metode zlatnog preseka

    5. Metoda polovljenja intervala

    function [c,err,yc]=bisect(f,a,b,delta)

    c=0;err=Inf;yc=0;ya=f(a);yb=f(b);if ya*yb > 0, return, endmax1=1+round((log(b-a)-log(delta))/log(2));for k=1:max1

    c=(a+b)/2;yc=f(c);if yc==0

    a=c;

  • 8/3/2019 drugi izvestaj

    19/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 18 -

    b=c;elseif yb*yc>0

    b=c;yb=yc;

    elsea=c;

    ya=yc;endif b-a < delta, break,end

    end

    c=(a+b)/2;err=abs(b-a);yc=f(c);

    x=0:0.001:1;y=f(x);plot(x,y)

    Slika 7: Reenje metode polovljenja intervala

  • 8/3/2019 drugi izvestaj

    20/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 19 -

    6. Metoda parabole

    function parabola(func, x0, x2, tolx)

    % func: nelinearna funkcija koja se minimizuje% x0, x2 :granice intervala% tolx: tolerancija

    k = 0; % brojacx1 = (x0 + x2)/2;

    % Vrednosti funkcije u tri tackefx0 = feval(func, x0);fx1 = feval(func, x1);fx2 = feval(func, x2);

    while (x2 - x0) > tolx % (x2 x0) je uvek pozitivno% Pronalazi minimalnu tacku parabolenumerator = (x2^2 - x1^2)*fx0 - (x2^2 - x0^2)*fx1 + (x1^2 - x0^2) *fx2;denominator = 2*((x2 - x1)*fx0 - (x2 - x0)*fx1 + (x1 - x0)*fx2);xmin = numerator/denominator;% Vrednost funkcije u xminfxmin = feval(func, xmin);% Bira sledece tri tacke za konstrukciju paraboleif xmin < x1

    if fxmin < fx1x2 = x1;fx2 = fx1;x1 = xmin;fx1 = fxmin;

    elsex0 = xmin;fx0 = fxmin;

    endelse

    if fxmin < fx1x0 = x1;

    fx0 = fx1;x1 = xmin;fx1 = fxmin;

    elsex2 = xmin;fx2 = fxmin;

    endendk = k + 1;

    end

  • 8/3/2019 drugi izvestaj

    21/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 20 -

    fprintf('x0 = %7.6f x2 = %7.6f f(x0) = %7.6f f(x2) = %7.6f \n', x0, x2, fx0,fx2)fprintf('x_min = %7.6f f(x_min) = %7.6f \n',xmin, fxmin)fprintf('broj iteracija = %2d \n', k)

    Pozivanje:

    parabola('fun', 0, 9, 0.0001)

    x=0:0.001:1;y=f(x);plot(x,y)

    Slika 8: Reenje metode parabole

  • 8/3/2019 drugi izvestaj

    22/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 21 -

    7. Regula-Falsi metoda (metoda pogrenog poloaja)

    format long;

    f = @(x) cos(x) + exp(x);

    a = 0; b = 1;

    step_size = Inf;e_step = 1e-15;n = 0;

    while (step_size >= e_step)c = b - (f(b)*(b-a)) / (f(b)-f(a));if f(a)*f(c) < 0

    step_size = b - c;b = c;else

    step_size = c - a;a = c;endn = n + 1;end

    fprintf('Aproksimativni korak nakon %d iteracija je: %12.15f',n,c);

    grid on; hold on;title('Regula Falsi (Method of False Position)');

    x = linspace(0,1,10);plot(x,f(x));

    Slika 9: Reenje metoda Regula-Falsi

  • 8/3/2019 drugi izvestaj

    23/23

    December

    12, 2011METODI OPTIMIZACIJE

    - 22 -

    Literatura:

    [1] - Prof. dr. Boidar Rosi - Metodi optimizacije (hendouti)

    [2] - Introduction to Optimum Design 2nd ed - J. Arora (Elsevier, 2004) WW

    [3] - Matlab: A Practical Introduction to Programming

    and Problem Solving - Stormy Attaway

    [4] - Applied numerical methods using Matlab - Won Young Yang,

    Wenwu Cao, Tae-Sang Chung, John Morris