%On étudie le "phénomène de Runge" pour x->1/(1+25*x^2)
%Il fait intervenir les polynômes d'interpolation de Lagrange,
%qu'on calcule ici en résolvant un "système de van der Monde"
%La fonction "complement_TP2" s'inspire du livre de Lapresté, page 97
%(Une variante se trouve dans le livre de Dumas, page 215)
%J'ai ajouté l'approximation par moindre carrés
%On appliquera "complement_TP2" en m entier compris entre 1 et 30
function complement_TP2(m)

figure(1)
interpolation('f',[-1:2/m:1]') %f et interpolation sont définis ci-dessous
xlabel('x : avec des points d''interpolation équirépartis'), ylabel('y')

figure(2)
interpolation('f',[cos((pi/(2*m+2))*(2*[m:-1:0]+1))]')
xlabel('x : avec des points d''interpolation de Tchebychev'), ylabel('y')

figure(3)
moindres_carres('f',m)


function y=f(x)

y=1 ./(1+25*x.^2);


function interpolation(fun,x0)

n=length(x0)-1;
y0=feval(fun,x0);

V=vdm(x0,n); p=(V\y0)'; p=p(n+1:-1:1); %ou : v=vander(x0); p=(v\y0)';

x=linspace(-1,1,100);
y=feval(fun,x);
yapproche=polyval(p,x);
err=max(abs(yapproche-y));

plot(x0,y0,'go',x,y,'r',x,yapproche,'y'), axis equal
title(['\bf Interpolation de degré ',int2str(n),' de ',fun,...
      ' par Lagrange sur [-1,1] : erreur max=',num2str(err,3)]);


function moindres_carres(fun,n)

x=linspace(-1,1,100)';
y=feval(fun,x);
V=vdm(x,n); p=(V\y)'; p=p(n+1:-1:1); %ou : polyfit(x,y,m)

ymoindres_carres=polyval(p,x);
err=max(abs(ymoindres_carres-y));
plot(x,y,'r',x,ymoindres_carres,'y'), axis equal
title(['\bf Interpolation de degré ',int2str(n),' de f',...
      ' sur [-1,1] par moindres carrés : erreur max=',num2str(err,3)]);
xlabel('x'), ylabel('y')