function[vysledek]=rank1(A,M,N)
%na vstupu: A - daná matice
%           M,N - symetrické pozitivně definitní matice
%na výstupu: vysledek - hledaná matice
[m,n]=size(A);
r=rank(A);
if r~=1
    error('Matice A musí mít hodnost 1.')
end;
[m1,m2]=size(M);
if norm(M-M')~=0 | m1~=m2 | m1~=m | sum(eig(M)>0)~=m
   error(['M musi byt symetricka pozitivne ', ...
        'definitni matice typu m x m'])
end;
[n1,n2]=size(N);
if norm(N-N')~=0 | n1~=n2 | n1~=n | sum(eig(N)>0)~=n
   error(['N musi byt symetricka pozitivne ', ...
        'definitni matice typu n x n'])
end;
[B,C]=skelet(A);
k=1;
Va=B'*M*A*inv(N)*C';
Aplus=(inv(N)*C'*Va'*B'*M)/trace(Va'*Va);
vysledek=Aplus;