Resoluções do pteste(MATLAB).pdf 1. Resolução do pteste1 pelo fminsearch do MATLAB
Definição do ficheiro (M-file) com a definição da função objectivo:
function [f] = pteste1(x)
f=max((x(1)+x(2)),abs(x(1)*x(2)));
Na janela de comandos: Ponto inicial:
>> x0=[1;1];
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fminsearch('pteste1',x0) … (Nelder-Mead) >> format long Definição de opções: >> options=optimset('TolX',1e-08); (para verificar) >> options
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fminsearch('pteste1',x0,options) …
2. Resolução do pteste2 pelo fminsearch do MATLAB
Definição do ficheiro (M-file) com a definição da função objectivo:
function [f] = pteste2(x) f=max((x(1)-1)^2,x(1)^2+4*(x(2)-1)^2); Na janela de comandos: Ponto inicial: >> x0=[1;1]; Definição de opções: >> options=optimset('TolX',5e-01);
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fminsearch('pteste2',x0,options) …
Na janela de comandos: >> [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
Definição do ficheiro (M-file) com a definição da função objectivo:
function [f] = pteste3(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
Na janela de comandos: Ponto inicial:
>> x0=[-1.2;1];
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fminsearch('pteste3',x0) … (exitflag=0)
Definição de opções:
>> options=optimset('MaxFunEvals',2000);
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fminsearch('pteste3',x0,options) …
Na janela de comandos:
>> [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
Definição do ficheiro (M-file) com a definição da função objectivo:
function [f] = pteste3(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
Na janela de comandos: Ponto inicial:
>> x0=[-1.2;1];
Invocação da função de optimização:
>> [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)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; 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); if (nargout>2)
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]; end end Na janela de comandos: Ponto inicial: >> x0=[-1.2;1]; Definição de opções: >> options=optimset('LargeScale','off','GradObj','on','Hessian','on');
Invocação da função de optimização:
>> [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))];
if (nargout>2)
% matriz Hessiana de dimensão nxn G=[10 -2 2;-2 26 6;2 6 2];
end end
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)
c = [-6*x(2)-4*x(3)+x(1)^3+3];
% restrições de igualdade (vector de m elementos) ceq = [];
if (nargout>2)
% 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=[];
end
Na janela de comandos: Ponto inicial:
>> 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];
Definição de opções:
>> options=optimset('Largescale','off','GradObj','on','Hessian','on', 'GradConstr','on');
Invocação da função de optimização:
>> [x,fval,exitflag,output]=fmincon('pteste4',x0,[],[],Aeq,beq,lb,[], 'pteste4r',options) ... (SQP QN line search) ou >> [x,fval,exitflag,output,lambda,grad,hessian]= ...