function [P,L] = LIP(x,f)
% function [P,L] = LIP(x,f)
% Vypocet Lagrangeova interpolacniho polynomu
% x - uzly
% f - funkcni hodnoty
% P - vysledny interpolacni polynom
% L - po radcich Lagrangeovy fundamentalni polynomy


[m,n]=size(x);
% test, zda na vstupu neni matice nebo je prazdny vstup
lx=length(x);
if lx==0 | lx<m*n
    error('Na vstupu je matice nebo prazdny vektor!')
end
% test, jestli se neopakuji uzly
if length(unique(x))<lx
    error('Uzly se opakuji!')
end
% test, zda vstupy maji stejne rozmery
if any([m,n]~=size(f))
    error('Vstupni data nemaji stejne rozmery!')
end

% prevedeme vstupni data do radku
if m>1
    x=x';f=f';
end

om=poly(x);
% matice fundamentalnich polynomu
L=[];
for xx=x
    C=deconv(om,[1, -xx]);
    J=polyval(C,xx);
    L=[L;C/J];
end

% vysledny interpolacni polynom
P=f*L;

end

