%
%
% -----------------------------------------------------
%
%   Approximation  im  Wintersemester 2013/14
%   H.J. Oberle
%
%   Beispiel 3.17  
%   Polynom-Interpolation der Funktion 
%   f(t) = 1/(1+t^2), -5 <= t <= 5
%   Tschebyscheff-Knoten
%
% ----------------------------------------------------
%
function runge02(n)
%
close all
%
format long e
%
%  Tschebyscheff-Knoten:
%
for i=1:(n+1),
    x(i) = 5*cos((1+2*(n+1-i))/(2*n+2)*pi);
end
y = (1+0*x)./(1+x.*x);
%
d = divdiff(x,y);
%
%   Stuetzstellen und dividierten Differenzen:
%
fprintf('\n Runge02:  n =  %5d \n', n); 
%fprintf('\n Runge02:  Stuetzstellen und dividierte Differenzen:\n'); 
%format long e
%for i=1:n+1,
%fprintf('   %+2.4e   %+2.10e  %+2.10e \n', x(i), y(i), d(i)) 
%end
%
%   Auswertung des Interpolationspolynoms:
%
t = [-5:0.01:5];
p = d(n+1) + 0*t;
for k=n:-1:1,
    p = (t-x(k)).*p + d(k);
end
f = (1+0*t)./(1+t.*t);
e = f - p;
%
%   Plot 
%
plot(t,p,'b','Linewidth',1.2)
set(gca,'Linewidth',1.0,'FontSize',12)
axis([-5 5 -0.1 1.1])
hold
plot(t,f,'k','Linewidth',1.2)
plot(x,y,'k.','Markersize',20)
xlabel('Beispiel von Runge','FontSize',14)
print -depsc runge02a
%
figure
plot(t,e,'b','Linewidth',1.2)
set(gca,'Linewidth',1.0,'FontSize',12)
xlabel('Interpolationsfehler','FontSize',14)
print -depsc runge02b
%
% --------------------------------------------------------------------------

function [d] = divdiff(x,y)
%
n = length(x) - 1;
d = y;
for k=1:n,
	for j=n:-1:k,
        d(j+1) = (d(j+1)-d(j))/(x(j+1)-x(j-k+1));
    end
end
%
% --------------------------------------------------------------------------


