% interpol02.m
% interpolation de Lagrange 
% fd, agreg, 08 octobre 2006, 04 mars 2025 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   clear , format long
   
printf("interpol02 : polynome d interpolation  de Lagrange\n");

%% 
%  n  nombre de donnees brutes ; c est un nombre d intervalles...
nex = 100 ;  deltax =  3*pi 
dxex =  deltax  / nex  ;
xex =zeros(nex+1 , 1) ; yex =zeros(nex+1 , 1) ; 
for j=1:nex+1 ; xx =  (j-1)*dxex ;   
xex (j:j , 1) = xx ; 
yex (j:j , 1) = sin(xx) ; end 
hold off ;
plot(xex,yex,"k;fonction sinus;") ;  
axis ( [ -.1 ,  deltax+.1 , -1.1 , 1.41  ]) ;


n=20
x =zeros(n+1 , 1) ; 
u0=zeros(n+1 , 1) ; 
dx =   deltax   / n ;
for j=1:n+1 ; xx = (j-1)*dx ;  
x (j:j , 1) = xx ;
u0(j:j , 1) =  sin(xx) ; end 
hold on ; 
plot(x,u0(:,1),"*-b;interpolation affine par morceaux;") ;  
%   pause ; 
%%%%%%%%%%%%%%%%%%%%%%%%%%          utilisation des fonctions usuelles de matlab  
[P, S] = polyfit (x, u0, n) ; 
nn=15*n ;  dy= deltax /nn ; 
xx =zeros(nn+1, 1) ; 
for j=1:nn+1 ; xxx =  (j-1)*dy ;
xx (j:j , 1) = xxx ; end ;  

yy=polyval(P,xx) ; 
hold on ;  plot(xx,yy ,"-r;interpolation de Lagrange avec polyfit et polyval;") ; 
title ('interpolation du sinus de degre 12') ;
print('02-interpolation-sinus', '-djpg','-S891,630'); 
