% lagran2.m
% interpolation de Lagrange, programmee correctement ?
% fd, 09 janvier 2006.
% fd, 30 juin 2026
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
clear , format long
   
printf("lagran2 ; base des polynomes d interpolation de Lagrange \n"); 
printf("          parametre n : nombre d intervalles  \n"); 
printf("          pour de jolis graphiques, nous recommandons d'utiliser n=6  \n"); 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%% printf("\n");

% title ('Cnam Paris. Travaux pratiques Iacs.') ;
xlabel (' lagran4. Base des polynomes d interpolation  de Lagrange ') ;

pdebut = [-1 1 0] ; 
n=6
				   
x =zeros(n+1 , 1) ; y =zeros(n+1 , 1) ;
dx = 1 / n ;
for j=1:n+1 ;  x (j:j , 1) = (j-1)*dx; end ;
% base des polynomes 
nn=12*n ; dy=1/nn ; poly=zeros(nn+1,n+1) ; xx =zeros(nn+1,1); 
for i=1:nn+1 ; xx(i) = (i-1) * dy ;  end ; 

for i=1:n+1 ;  hold on ; 
uu=zeros(n+1,1) ; uu(i:i,1)=1 ; uu' ;   x' ;   
newt=diffdiv(n,x,uu) ; 
for k=1:nn+1 ; 
poly(k:k,i)=evalpol(n,newt,x,xx(k)) ;
end ;  end ; 

%  ce reglage de l axe des y est adapte a n=6....
axis ( [ -.1 , 1.1 , -1.4 , 1.5  ]) ;
vec=zeros(2,2); xmin=-.05 ; xmax=1.05  ;
vec(1:1,1) = xmin ; vec(1:1,2) = 0 ; 
vec(2:2,1) = xmax ; vec(2:2,2) = 0 ;

hold off ; 
plot( vec(:,1) , vec(:,2),   'b;;') ;  hold on ;  %%% pause
title ('suite de sept points equidistants') ;
plot( x(:,1) , y(:,1) ,   '*r;;') ; 
axis ( [ -.1 , 1.1 , -1.4 , 1.5  ]) ; pause (.5) 
print('08-a-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  

%
for j=1:n+1 ; 
vec(1:1,1) = x(j:j,1) ; vec(1:1,2) = 1 ; 
%if ((j>=1)&(j<=1)) ;  hold off ; else ; hold on ;  end ; 
if ((j>=1)&(j<=1)) ;  hold on ; else ; hold on ;  end ; 
l=floor(j/5) ; i=j-5*l ;

if j==1 ;
title ('noeud d interpolation le plus a gauche') ;
plot(xx,poly(:,j),"r;;", vec(1:1,1) , vec(1:1,2),"*r;;") 
print('08-b-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

%%% if ((i>=0)&(i<=0)) ;  plot(xx,poly(:,j),"r;;") ; 
%%% plot(vec(1:1,1) , vec(1:1,2),"*r;;") ; pause ; end ; 

if j==2 ;
title ('second noeud d interpolation depuis la gauche') ;
plot(xx,poly(:,j),"g;;", vec(1:1,1) , vec(1:1,2),"*g;;") 
print('08-c-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

if j==3 ;
title ('troisieme noeud d interpolation depuis la gauche') ;
plot(xx,poly(:,j),"c;;", vec(1:1,1) , vec(1:1,2),"*c;;") 
print('08-d-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

if j==4 ;
title ('quatrieme noeud d interpolation depuis la gauche') ;
plot(xx,poly(:,j),"m;;", vec(1:1,1) , vec(1:1,2),"*m;;") 
print('08-e-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

if j==5 ;
title ('cinquieme noeud d interpolation depuis la gauche') ;
plot(xx,poly(:,j),"b;;", vec(1:1,1) , vec(1:1,2),"*b;;") 
print('08-f-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

if j==6 ;
title ('second noeud d interpolation depuis la droite') ;
plot(xx,poly(:,j),"k;;", vec(1:1,1) , vec(1:1,2),"*k;;") 
print('08-g-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

if j==7 ;
title ('noeud d interpolation le plus a droite') ;
plot(xx,poly(:,j),"r;;", vec(1:1,1) , vec(1:1,2),"*r;;") 
print('08-h-base-des-polynomes-de-lagrange', '-djpg','-S891,630')  
pause (.5) ; end 

end ;  hold off ; 

%%%





