% PMMER  izracunavanje parcijalnih mera manipulabilnosti planarnog robota%
%
%     pmm = PMMER (J)
%     pmm = PMMER (J,k,l)
%
%  Ulazni argumenti :
%   J jakobijan manipulatora (2xn)
%   k,l- indeks pmm koja se trazi
%
%  Izlazni argument:
%   ako k,l nisu  zadati izlaz je 1xn matrica koja sadrzi sve pmm redom
%   ako su zadati k,l izlaz je vrednost trazene pmm
%
% (c) 1996. Rasic Milan
function pmm= pmmer(J,k,l);
if nargin==3,
   % samo jedna pmm
   ind = [k,l];
   pmm = sqrt(det(J(:,ind)*J(:,ind)'));
elseif nargin==1;
   % sve pmm
   [m,n]=size(J);
   % broj pmm - kombinacije m-te klase n elemenata
   npmm= gamma(n+1)/(gamma(m+1)*gamma(n-m+1));
   % alokacija memorije
   pmm = zeros (1,npmm);
   
   ind =[0:m];
   
   inp = 1;
   while inp<=npmm;
     
     % izracunavanje pmm  
     pmm(inp)=sqrt(abs(det(J(:,ind(2:m+1))*J(:,ind(2:m+1))')));
     
     % generisanje kombinacija   
     i=m+1;
     while i>=2,
       if ind(i)<n-m+i-1,
          ind(i)=ind(i)+1;
          for j=i+1:m+1,
            ind(j)=ind(j-1)+1;
          end;
          break
       end;
       i=i-1;  
     end 
     inp=inp+1;
   end;
else
   error ('Losi ulazni argumenti!');
end;         
   
