clear variables

%% Skript zur Aufgabe 2, Blatt 2
% Berechnung der Dividierten Differenzen zu gegebenen Knoten xknots und
% Funktionswerten yknots
% und Auswertung des Newtonschen Interpolationspolynomes an den Stellen
% x2beval

% Knoten(werte)
xknots=[0,1,4,9];
yknots=sqrt(xknots);
% Anzahl der Knoten
n=length(xknots);
% x-Werte, zu denen das Interpolationspolynom ausgewertet werden soll
x2beval=[.5,2,4];
lx=length(x2beval);

% bestimme die Dividierten Differenzen zur Interpolation mit Newton
% nach Algorithmus 2.14 des Skriptes
h=zeros(1,n); p=zeros(1,n);
for k = 1:n
   h(k) = yknots(k);
   if k > 1
      for i = k-1:-1:1
         h(i) = (h(i+1)-h(i))./(xknots(k)-xknots(:,i));
      end
   end
   p(k) = h(1);
end

% Horner-Schema ähnliches Vorgehen (vgl. Alg. 2.15) für die Auswertung des
% Newtoninterpolationspolynomes
pNvals = p(:,n)*ones(1,lx);
for i = n-1:-1:1
    pNvals = pNvals.*(x2beval-xknots(i)*ones(1,lx))+p(:,i)*ones(1,lx);
end
pNvals