Metodo Simplex con Matlab
Short Description
Descripción: Dos ejemplos del método simplex resueltos mediante Matlab...
Description
����������� ���������� �� ��� ������� �� ������� �������� �� ���������� ��������� ������� ��������� �������� 2:
8.� ������������� ������� ��� ������ �������.
�� ���� �������� �� ������ ����������� �� �������� ��� �������� �������� �� ������ ������� �� �������� �� ������������ ������������ ��� ������������� �� �� ���� �������������� �������������� ��������� z
=cx
��� �������� � ��� ��������� �� �������� x � ������ �� A x
= b�
x ≥ 0
������
a11 a x1 21 x = � A = ... x2 am1
a22 � ... am 2 a12
c = [ c1
b1 b 2 c2 ] b = ... bm
��������
A ������������ ��������� �� ������ ��������� ������� ���� ����� ������ �� �������� �������� �� ������������� � �������� ��� ������� ��� �� ���� ���������. function simplex_graphic(A,b,c,direccion) function %Método Simplex gráfico para resolver el problema de maximizar z=c*x sujeta %a A*x0 error('Noexiste region factible acotada'); end x1=vertices(1,:); x2=vertices(2,:); k=convhull(x1,x2); hold on; fill(x1(k),x2(k),[0.7 0.7 0.7]); xlabel('x_1','FontSize',15); ylabel('x_2','FontSize',15); z=c*vertices; z0=max(z); [~,nvert]=size(vertices); %xmax=max(vertices(1,:)); xmin=min(vertices(1,:)); for j=1:nvert clc; x0=vertices(1,j); y0=vertices(2,j); if c(1)*c(2)~=0 x=[0.7*x0,1.3*x0]; y=y0+(-c(1)/c(2))*(x-x0); plot(x,y,'r--','LineWidth',2); end title(['Región de solución factible, con z=',num2str(z0)],'FontSize',15) text(x0,y0,[' (',num2str(x0),',',num2str(y0),')'],'Fontsize',15) plot(x0,y0,'o',... 'MarkerEdgeColor','k',... 'MarkerFaceColor','r',... 'MarkerSize',5) grid on respuesta=input('\n-Presione la tecla 1 para mostrar el siguiente vertice\n-Presione la tecla 0 para salir\n(De lo contrario dará error)\nRespuesta: '); switch(respuesta); case 1 case 0 break end
end display('Se ha alcanzado el numero máximo de posibles soluciones (elija uno)') display('Se recomienda la que coincida con la sol factible mostrada al evaluar') end
�� �������� ������ �������� �� ���� ��������� �������� ��� ������ ����� ������ �� ��, ��� ��� ��� ����������: function puntos=corner1(A,b) %Puntos extremos [m,n]=size(A); puntos=[]; if n>=m combin=nchoosek(n,m); %Coeficientes binomiales v=nchoosek(1:n,m); for k=1:combin y=zeros(n,1); x=inv(A(:,v(k,:)))*b; if all(x>=0 & (x~=inf & x~=-inf)) y(v(k,:))=x; puntos=[puntos y]; end end else error('Número de ecuaciones es > número de variables'); end puntos puntos=deleteCol1(puntos); end
� function puntos=deleteCol1(puntos) %Borra columnas repetidas [nn,L]=size(puntos); v=[]; for i=1:L-1 for j=i+1:L x=puntos(:,i); y=puntos(:,j); if all(x==y) v=[v,j]; end end end puntos(:,v)=[]; end
���� �� �������� ������� ����� �� ����� (������), ����� ����� �� ������� ��� ��� ����������: >> A=[7 11;10 8;1 0;0 1] A = 7
11
10
8
1
0
0
1
>> b=[77;80;9;6] b = 77 80 9 6 >> c=[150 175] c = 150
175
>> direccion=['
View more...
Comments