Resoluções do pteste(matlab).pdf 1. Resolução do pteste1 pelo fminsearch do MATLAB function [f] = pteste1(x) f=max((x(1)+x(2)),abs(x(1)*x(2))); >> x0=[1;1]; >> [x,fval,exitflag,output]=fminsearch('pteste1',x0) (Nelder-Mead) >> format long >> options=optimset('tolx',1e-08); (para verificar) >> options >> [x,fval,exitflag,output]=fminsearch('pteste1',x0,options) 2. Resolução do pteste2 pelo fminsearch do MATLAB function [f] = pteste2(x) f=max((x(1)-1)^2,x(1)^2+4*(x(2)-1)^2); >> x0=[1;1]; >> options=optimset('tolx',5e-01); >> [x,fval,exitflag,output]=fminsearch('pteste2',x0,options) MN II Edite M.G.P. Fernandes, Departamento de Produção e Sistemas 1
>> [x1,x2]=meshgrid(-10:1:10); >> f=max((x1-1).^2,x1.^2+4*(x2-1).^2) ; >> mesh(x1,x2,f),grid on >> contour(x1,x2,f,20),grid on 3. Resolução do pteste3 pelo fminsearch do MATLAB function [f] = pteste3(x) >> [x,fval,exitflag,output]=fminsearch('pteste3',x0) (exitflag=0) >> options=optimset('maxfunevals',2000); >> [x,fval,exitflag,output]=fminsearch('pteste3',x0,options) MN II Edite M.G.P. Fernandes, Departamento de Produção e Sistemas 2
>> [x1,x2]=meshgrid(-100:1:100); >> f=100*(x2-x1.^2).^2+(1-x1).^2 ; >> plot3(x1,x2,f),grid on >> contour(x1,x2,f,20),grid on 4. Resolução do pteste3 pelo fminunc do MATLAB function [f] = pteste3(x) >> [x,fval,exitflag,output]=fminunc('pteste3',x0) (line search Quasi-Newton) Definição do ficheiro (M-file) com a definição da função objectivo, do vector gradiente e da matriz Hessiana: function [f,g,g] = pteste3(x) if (nargout>1) % vector gradiente de dimensão n (n - nº de variáveis) g=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)]; % g(1)=- 400*x(1)*(x(2)-x(1)^2)-2*(1-x(1)); % g(2)= 200*(x(2)-x(1)^2); % matriz Hessiana de dimensão nxn MN II Edite M.G.P. Fernandes, Departamento de Produção e Sistemas 3
G=[-400*x(2)+1200*x(1)^2+2-400*x(1);-400*x(1) 200]; % G(1)=[-400*x(2)+1200*x(1)^2+2-400*x(1)]; % G(2)=[-400*x(1) 200]; >> options=optimset('largescale','off','gradobj','on','hessian','on'); >> [x,fval,exitflag,output]=fminunc('pteste3',x0,options) (line search Quasi-Newton) Se usar a seguinte definição de opções: >> options=optimset('largescale','on','gradobj','on','hessian','on'); Na invocação da função de optimização: >> [x,fval,exitflag,output]=fminunc('pteste3',x0,options) (trust-region Newton) 5. Resolução do pteste4 pelo fmincon do MATLAB Definição do ficheiro (M-file) com a definição da função objectivo, gradiente e matriz Hessiana: function [f,g,g] = pteste4(x) f=(x(1)+3*x(2)+x(3))^2+4*(x(1)-x(2))^2; if (nargout>1) % vector gradiente de dimensão n g=[2*(x(1)+3*x(2)+x(3))+8*(x(1)-x(2));6*(x(1)+3*x(2)+x(3))-8*(x(1)- x(2));2*(x(1)+3*x(2)+x(3))]; % matriz Hessiana de dimensão nxn G=[10-2 2;-2 26 6;2 6 2]; Definição do ficheiro (M-file) com a definição das restrições não lineares e dos gradientes: function [c,ceq,gc,gceq] = pteste4r(x) % restrições de desigualdade na forma <= (vector de p elementos) MN II Edite M.G.P. Fernandes, Departamento de Produção e Sistemas 4
c = [-6*x(2)-4*x(3)+x(1)^3+3]; % restrições de igualdade (vector de m elementos) ceq = []; % gradientes das restrições de desig. (matriz de dimensão nxp) gc=[3*x(1)^2;-6;-4]; % gradientes das restrições de igual. (matriz de dimensão nxm) gceq=[]; >> x0=[0.1;0.7;0.2]; Definição da restrição linear de igualdade (na forma Aeq x = beq): >> Aeq=[1 1 1]; >> beq=[1]; Definição da restrição linear de desigualdade (na forma A x <= b): não tem Definição dos limites simples (lb e ub): >>lb=[0;0;0]; >> options=optimset('largescale','off','gradobj','on','hessian','on', 'GradConstr','on'); >> [x,fval,exitflag,output]=fmincon('pteste4',x0,[],[],aeq,beq,lb,[], 'pteste4r',options)... (SQP QN line search) ou >> [x,fval,exitflag,output,lambda,grad,hessian]=... MN II Edite M.G.P. Fernandes, Departamento de Produção e Sistemas 5