function d = detlap(A,r)
% VYPOCET DETERMINANTU LAPLACEOVYM ROZVOJEM
% function d = detlap(A,r)
% -----------------------------------------
% Vstupy povinné:
% A ... ctvercova matice
% Vstupy nepovinné:
% r ... cislo radku, podle nejz se provadi rozvoj (default=1)
% Výstupy:
% d ... hodnota determinantu

% (C) 2004, V. Veselý, Masaryk University of Brno (Czech Republic)
%

error(nargchk(1,2,nargin));
if nargin<2, r = []; end
% Nastavení implicitních (default) hodnot:
if isempty(r), r = 1; end
[m,n] = size(A);
if m~=n, error('Matice neni ctvercova'); end
if prod(size(r))~=1, error('r neni skalar'); end
r = round(r);

% Vypocet determinantu
if n==2
   d = A(1,1)*A(2,2)-A(1,2)*A(2,1); return;
elseif n==1
   d = A; return;
elseif isempty(A)
   d = 1; return;
end

if r<1 | r>m
   error('r je mensi jak 1 nebo vetsi nez rozmer matice.');
end

% Laplaceuv rozvoj pro matici radu vetsiho jak 2:
I=1:n;
d=0;
for k=1:n
    if A(r,k)~=0
       d = d+(-1)^(r+k)*A(r,k)*detlap(A(I~=r,I~=k));
    end
end
