%
%  Plotter funksjonen, interpolasjonspolynomet
%  feil og oevre feilgrense.
%
%  Testproblem: sin(pi/2*x) paa [0,1], gitt i f_poly.m

fordeling = 'chebyshev'; 
% fordeling = 'uniform';  % alternativ

n = 5;
M = (pi/2)^(n+1);
a = 0; b = 1;

% Setter opp nodene. 
i = 0:n;
if strcmp(fordeling,'chebyshev')
    t = cos((2*i+1)/(2*n+2)*pi);
    x = 0.5*(a+b)+0.5*(b-a)*t;
    o_feil = 1/2^n/factorial(n+1)*((b-a)/2)^(n+1)*M;
elseif strcmp(fordeling,'uniform')
    t = -1+2*i/n;
    x = 0.5*(a+b)+0.5*(b-a)*t;    
    o_feil = 1/4/(n+1)*((b-a)/n)^(n+1)*M;
else 
    x = input('Noder: ');
    o_feil = 0;           % Ingen oevre feilgrense kjent. 
end

% Finner f(x(i)), regner ut interpolasjonspolynomet.

y = f_poly(x);
coeff = polyfit(x,y,n);

% Regner ut f(t) og p(t)
tt = [a:(b-a)/100:b];
ft = f_poly(tt);
pt = polyval(coeff,tt);

% Tegner f(t) og p(t)
subplot(2,1,1)
plot(tt,ft,'b',tt,pt,'--g',x,y,'r*');
legend('f(x)','p_n(x)');
title('f(x) og p_n(x)');
grid on

% Tegner feilen. 
subplot(2,1,2)
plot(tt,ft-pt,[a,b],[o_feil,o_feil],'--g',[a,b],[-o_feil,-o_feil], ...
     '--g');
title('Feil og feilgrense');
grid



