function [B,R] = baseadmissible(A,b)
% BASADMISSIBLE renvoie une base admissible pour le simplexe
%   [B,R] = baseadmissible(A,b) renvoie une base admissible
%   B au problème d'optimisation Az=b, z>=0.
%   B est un vecteur de taille size(A,1) contenant des 
%   indices distincts. L'ensemble des indices compléments R
%   est aussi renvoyé. Il est impératif que 
%   A(:,size(A,2)-size(A,1)+1:) soit inversible.

  m=size(A,1);
  n=size(A,2);

  if length(b)~=m
    error('b et A incompatibles');
  end
  if det(A(:,n-m+1:n))==0
    error('Dernier carre de A non inversible');
  end

  x=A(:,n-m+1:n)\b;%x=b si le dernier carré est l'identite

  L=find(x<0);
  for i=1:length(L)
    A=[A -A(:,n-m+L(i))];
  end

  Bd=find(x>0)+n-m;%les yi sans zi correspondants
  Bd=[Bd; n+1:n+length(L)];%tous les zi

  Rd=[1:n-m]';%tous les xi
  Rd=[Rd; L+n-m];%tous les yi qui ont un zi

  c=-[zeros(n,1);ones(length(L),1)];

  T=tableausimplexe(A,b,c,Bd,Rd);
  [T,B,R]=simplexe(T,Bd,Rd);
if T(size(T,1),size(T,2)) ~=0
  error('Aucune base admissible');
end  
