function [sol,flag]=simplex2fases(A,b,c,indBase)
%% La función [sol,flag]=simplex2fases(A,b,c,indBase)
%% resuelve el problema
%%  min c'x,     S.A.  A.x = b, x>=0
%%
%% CON b>=0 y indBase=indices de las vars. de los vectores base
%%              (vars. holgura o artificiales)
%%
%% y devuelve
%% flag= 0, si no existe solución,
%%     = 1, si la solución es única,
%%     = 2, si existe un segmento de soluciones,
%%     = inf, si la solución es no acotada
%% sol = solucion, en los casos (flag=1 o =2)
%%     = NaN, en otro caso (flag=0 o =inf).
%%
false=0; true=1;

[n,check]=size(c); if (check~=1),error ('c debe ser columna');end
[m,check]=size(b); if (check~=1),error ('b debe ser columna');end
[mA,nA]=size(A);
if ((n~=nA)|(m~=mA)),
 error(['A debe ser matriz de ',num2str(m),'x',num2str(n)]);
end
if (length(indBase)~=m),
 error ('J debe tener ',num2str(m),' elementos');
end

if (any(b<0)),
 % REQUIERE EL METODO DE LAS DOS FASES
 bneg=find(b<0);
 A(bneg,:)=-A(bneg,:);
 b(bneg)=-b(bneg);
 m=length(b);
 c2=[c*0 ;(b*0+1)];
 n=length(c2);
 A2=[A eye(m)];
 indBase=n-m+1:n;
 [sol,flag]=simplexEstandar(A2,b,c2,indBase);
 if (sum(sol(indBase))>10*m*eps),
  % PROBLEMA SIN SOLUCION
  sol=NaN; flag=0;
 else
  % PROBLEMA CON SOLUCION
  ind=find(sol>0); K=length(ind);
  if (K>m), error('Error:Nunca deberia ocurrir'); end
  % CONSTRUIMOS BASE INICIAL
  [sol,flag]=simplexEstandar(A,b,c,ind);
 end
else
 [sol,flag]=simplexEstandar(A,b,c,indBase);
end
