clear all; close all; %%%%%%%%%%%%%%%%%%%%%%%%%%% %% PROBLEMA 1 %%%%%%%%%%%%%%%%%%%%%%%%%%% %Ricordare ilsignificato di exitflag: % 1 LINPROG converged to a solution X. % 0 Maximum number of iterations reached. % -2 No feasible point found. % -3 Problem is unbounded. % -4 NaN value encountered during execution of algorithm. % -5 Both primal and dual problems are infeasible. % -7 Search direction became too small; no further progress can be made. %%%%%%%%%%%%%%%%%%%%%%%%%%% %% Definizione problema %% f = -x1 + x2 %% x1-2*x2>=2 %% x1+x2<=4 %% x1<=3 %% xi>=0, i=1,2 %%%%%%%%%%%%%%%%%%%%%%%%%%% fun = [-1 1]'; A = [-1 2; 1 1; 1 0]; b = [-2 4 3]'; lb = zeros(2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% linprog usato con la %% sintassi classica %%%%%%%%%%%%%%%%%%%%%%%%%%%% options=optimset('LargeScale','off','Display','iter','Simplex','on'); [x,fval,exitflag,output,lambda] = linprog(fun,A,b,[],[],lb,[],[],options) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% linprog con struttura %% di input %%%%%%%%%%%%%%%%%%%%%%%%%%%% problema1 = struct('f',fun,'Aineq',A,'bineq',b,'Aeq',[],'beq',[],... 'x0',[],'lb',lb,'ub',[],'options',options,'solver','linprog') [x,fval,exitflag,output,lambda] = linprog(problema1) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Rappresentazione grafica %% del problema %%%%%%%%%%%%%%%%%%%%%%%%%%%% a1=0; b1=6; a2=-3; b2=3; x1 = linspace(a1,b1,20); x2 = linspace(a2,b2,20); [X1,X2]=meshgrid(x1,x2); Y = -X1+X2; figure(1); hold on [c,h]=contour(X1,X2,Y,[-5 -4 -3 -2 -1 0]); clabel(c,h); line([0 0],[a2 b2],'Color','k','LineStyle',':') line([0 6],[0 0],'Color','k','LineStyle',':') line([3 3],[a2 b2],'Color','k','LineStyle',':') plot(x1,x1/2-1,'k:') x3 = linspace(1,6,20); plot(x3,4-x3,'k:') fill([2 3 3],[0 1/2 0],[1 0 0]) xlabel('X1') ylabel('X2') axis equal hold off %%%%%%%%%%%%%%%%%%%%%%%%%%% %% PROBLEMA 2 %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% %% Definizione problema %% f = 2*x1 + 4*x2 + 3*x3 %% -x1+x2+x3>=2 %% 2*x1+x2>=1 %% xi>=0, i=1,2,3 %%%%%%%%%%%%%%%%%%%%%%%%%%% fun = [2 4 3]'; A = [1 -1 -1; -2 -1 0]; b = [-2 -1]'; lb = zeros(3,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% linprog con struttura %% di input %%%%%%%%%%%%%%%%%%%%%%%%%%%% problema2 = struct('f',fun,'Aineq',A,'bineq',b,'Aeq',[],'beq',[],... 'x0',[],'lb',lb,'ub',[],'options',options,'solver','linprog') [x,fval,exitflag,output,lambda] = linprog(problema2) %%%%%%%%%%%%%%%%%%%%%%%%%%% %% PROBLEMA 3 %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% %% Definizione problema %% f = -3/4*x1 + 20*x2 - 1/3*x3 + 6*x4 %% 1/4*x1-8*x2-x3+9*x4<=1 %% 1/2*x1-12*x2-1/2*x3+3*x4<=3 %% x3+x4<=1 %%%%%%%%%%%%%%%%%%%%%%%%%%% fun = [-3/4 20 -1/2 6]'; A = [1/4 -8 -1 9; 1/2 -12 -1/2 3; 0 0 1 1]; b = [1 3 1]'; lb = zeros(4,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% linprog con struttura %% di input %%%%%%%%%%%%%%%%%%%%%%%%%%%% problema3 = struct('f',fun,'Aineq',A,'bineq',b,'Aeq',[],'beq',[],... 'x0',[],'lb',lb,'ub',[],'options',options,'solver','linprog') [x,fval,exitflag,output,lambda] = linprog(problema3) %%%%%%%%%%%%%%%%%%%%%%%%%%% %% PROBLEMA 4 %% Con soluzioni multiple %%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%% %% Definizione problema %% f = -x1 -x2 %% x1-x2<=1 %% x1+x2<=2 %%%%%%%%%%%%%%%%%%%%%%%%%%% fun = [-1 -1]'; A = [1 -1; 1 1]; b = [1 2]'; lb = zeros(2,1); %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% linprog con struttura %% di input %%%%%%%%%%%%%%%%%%%%%%%%%%%% problema4 = struct('f',fun,'Aineq',A,'bineq',b,'Aeq',[],'beq',[],... 'x0',[],'lb',lb,'ub',[],'options',options,'solver','linprog') [x,fval,exitflag,output,lambda] = linprog(problema4) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Rappresentazione grafica %% del problema %%%%%%%%%%%%%%%%%%%%%%%%%%%% a1=0; b1=6; a2=-3; b2=3; x1 = linspace(a1,b1,20); x2 = linspace(a2,b2,20); [X1,X2]=meshgrid(x1,x2); Y = -X1-X2; figure(2); hold on [c,h]=contour(X1,X2,Y,[-5 -4 -3 -2 -1 0]); clabel(c,h); line([0 0],[a2 b2],'Color','k','LineStyle',':') line([0 6],[0 0],'Color','k','LineStyle',':') plot(x1,x1-1,'k:') plot(x1,2-x1,'k:') %fill([1 3/2 2],[0 1/2 0],[1 0 0]) f1=fill([0 0 5],[-3 2 -3],[1 .7 .7],'FaceAlpha',.5) f2=fill([0 0 4 6 6],[-3 -1 3 3 -3],[.7 1 .7],'FaceAlpha',.5) f3=fill([0 0 6 6],[0 3 3 0],[.7 .7 1],'FaceAlpha',.5) xlabel('X1') ylabel('X2') axis equal hold off