%% Interpolační polynom
% Polynomy v Matlabu: https://www.mathworks.com/help/matlab/polynomials.html
%% Lagrangův polynom
% viz https://en.wikipedia.org/wiki/Lagrange_polynomial
%
%
%

x=[-2,-1,0,1,2];

%

om=poly(x) 
poly2sym(om)

%
% Matice keoficientů bázových polynomů

L=[];
for c=x
    N=deconv(om,[1, -c]);  % čitatel
    D=polyval(N,c);        % jmenovatel
    L=[L;N/D];
end

%
% Vykreslí bázové polynomy

xx=linspace(min(x),max(x),1000);
for j=1:length(x)
    plot(xx,polyval(L(j,:),xx))
    hold on
    poly2sym(L(j,:))
end
title("Lagrangovy bázové polynomy")
hold off

%

y=[-1,1,2,-3,4];

%

P=y*L
poly2sym(P)
plot(xx,polyval(P,xx),x,y,'*')

%
%% Newtonův polynom
% viz https://en.wikipedia.org/wiki/Newton_polynomial
%
%
% Poměrné diference:
%
% více zde: https://en.wikipedia.org/wiki/Divided_differences
%
%

x=[-2,-1,0,1,2];
y=[-1,1,2,-3,4];

%

f=[-1,1,2,-3,4];
for k=2:n
    pd=diff(f(k-1:end))./(x(k:end)-x(1:end-k+1)); % poměrné diference
    f(k:end)=pd; 
    bp=conv(bp,[1, -x(k-1)]); 	% bázový polynom
    P=[0 P]+f(k)*bp; 		    % výsledek
end

%

poly2sym(P)
plot(xx,polyval(P,xx),x,y,'*')