function[vysledek]=grevil(A,presnost)
%na vstupu: A - daná matice
%           presnost - přesnost algoritmu
%na vystupu: vysledek - pseudoinverze matice A
if nargin < 2
    presnost=1e-6;
end;
[r,s]=size(A);
A1=A(1:end,1);
k=0;
if A1==0
    Aplus=0;
else
    Aplus=(1/(A1'*A1))*A1';
end;
for i=2:s
    a=A(1:end,i);
    A1=A(1:end,1:i-1);
    d=Aplus*a;
    c=a-A1*d;
    for j=1:r
        k=k+1;
        if abs(c(j))<presnost
            c(j)=0;
        end;
    end;
    if c==0
        b=(1/(1+d'*d))*d'*Aplus;
    else
        b=(1/(c'*c))*c';
    end;
    Aplus=[Aplus-(d*b);b];
end;
vysledek=Aplus;