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

  
%  n  nombre de donnees brutes ; c est un nombre d intervalles...
%
nex = 300 ; dxex = 10  / nex  ;
xex =zeros(nex+1 , 1) ; yex =zeros(nex+1 , 1) ; 
for j=1:nex+1 ; xx = -5  +  (j-1)*dxex ;   
xex (j:j , 1) = xx ; 
yex (j:j , 1) = 1 / (1 + xx**2 ) ; end 
hold off ; plot(0,0,"*g;;") ; hold off ;
plot(xex,yex,"k;Lorentzienne;") ;    
axis ( [ -5.2 , 5.2 , -.02 , 1.11  ]) ;


n=7
x =zeros(n+1 , 1) ; 
u0=zeros(n+1 , 1) ; 
dx = 10 / n ;



for j=1:n+1 ; xx = -5 + (j-1)*dx ;  
x (j:j , 1) = xx ;
u0(j:j , 1) = 1 / (1 + xx**2 ) ;
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=10/nn ; 
xx =zeros(nn+1, 1) ; 
for j=1:nn+1 ; xxx = -5 + (j-1)*dy ;
xx (j:j , 1) = xxx ; end ;  

yy=polyval(P,xx) ; 
hold on ;  plot(xx,yy ,"r;interpolation de Lagrange de degre 7;") ; 
title ('interpolation d une lorentzienne') ;
print('01-interpolation-lorentzienne', '-djpg','-S891,630'); 

