function p=newton(m)
dimensions= size(m)
nbpoints=dimensions(1,1)
D=zeros(nbpoints,nbpoints+1)
D(:,1)=m(:,1)
D(:,2)=m(:,2)
for colonne=3:nbpoints+1 do
for ligne=1:nbpoints-colonne+2 do
i=ligne-1
j=colonne-2
D(ligne,colonne)=(D(ligne+1,colonne-1)-D(ligne,colonne-1))/(D(ligne+j,1)-D(ligne,1))
end
end
disp(D)
x=poly(0,'x')
p=0
for colonne=2:nbpoints+1 do
facteurs=1;
for ligne=1:colonne-2 do
facteurs=facteurs*(x-D(ligne,1))
end
//disp(facteurs)
p=p+D(1,colonne)*facteurs
//disp(p)
end
endfunction
function p=newton(m)
dimensions= size(m)
nbpoints=dimensions(1,1)
D=zeros(nbpoints,nbpoints+1)
D(:,1)=m(:,1)
D(:,2)=m(:,2)
for colonne=3:nbpoints+1 do
for ligne=1:nbpoints-colonne+2 do
i=ligne-1
j=colonne-2
D(ligne,colonne)=(D(ligne+1,colonne-1)-D(ligne,colonne-1))/(D(ligne+j,1)-D(ligne,1))
end
end
disp(D)
x=poly(0,'x')
p=0
for colonne=2:nbpoints+1 do
facteurs=1;
for ligne=1:colonne-2 do
facteurs=facteurs*(x-D(ligne,1))
end
//disp(facteurs)
p=p+D(1,colonne)*facteurs
//disp(p)
end
//calcul d'erreur à la sauce moindres carrés
erreur=0
for i=1:nbpoints do
erreur=erreur+ ( horner(p,m(i,1))-m(i,2) )^2
end
printf("\nErreur calculee : %f",erreur)
endfunction
function p=Lagrange(m)
dimensions= size(m)
nbpoints=dimensions(1,1)
x=poly(0,'x')
//les polynomes de Lagrange Lj(x) seront
//dans les nbpoints premières cases de p
p=ones(nbpoints+1,1)
//dans la dernière case, on trouvera le polynome
//d'interpolation de Lagrange
//calcul des polynomes de Lagrange Lj(x)
for i=1:nbpoints do
L=1
j=1
while j<=nbpoints do
if i==j then
j=j+1
end
if (j<=nbpoints) then
L=L*(x-m(j,1))/(m(i,1)-m(j,1))
end
j=j+1
end
p(i,1)=L
end
//calcul du polynome d'interpolation de Lagrange Pn(x)
pn=0
for i=1:nbpoints do
pn=pn+p(i,1)*m(i,2)
end
p(nbpoints+1,1)=pn
disp(p);
printf("\nLe polynome d interpolation de Lagrange est : ")
disp(pn)
endfunction
function info=mcarre2(mp,degre)
taille= size(mp);
nbpoints=taille(1,1);
printf("\n recu %d points\n",nbpoints)
MC=ones(degre+1,degre+1);
B=ones(degre+1,1);
MC(1,1)=nbpoints;
//premiere ligne de MC
for col=2 : degre+1 do
S=0
for i = 1 : nbpoints do
S=S+mp(i,1)^(col-1)
end
MC(1,col)=S
end
//derniere colonne de MC
for lig=2 : degre+1 do
S=0
for i = 1 : nbpoints do
S=S+mp(i,1)^(degre+lig-1)
end
MC(lig,degre+1)=S
end
// propagation en bas à gauche
for lig=2 : degre+1 do
for col = 1 : degre do
MC(lig,col)=MC(lig-1,col+1)
end
end
//Affichage MC
printf("\n MC = \n");
for lig=1 : degre+1 do
for col=1 : degre+1 do
printf("%f ",MC(lig,col))
end
printf("\n")
end
//calcul de B
for lig=1 : degre+1 do
S=0
for i = 1 : nbpoints do
S=S+( mp(i,1)^(lig-1) ) * ( mp(i,2))
end
B(lig,1)=S
end
//Affichage B
printf("\n B = \n");
for lig=1 : degre+1 do
printf("\n %f ",B(lig,1))
end
X=linsolve(MC,-B)
x=poly(0,'x')
pol=0
for i=1 : degre+1 do
pol=pol+X(i,1)*(x^(i-1))
end
erreur=0
for i=1 : nbpoints do
erreur= erreur + (horner(pol,mp(i,1)) -mp(i,2) )^2
end
printf("\n\n Erreur des moindres carrés = %f\n\n",erreur);
//info=ones(1,2) //dimensionne un tableau à 2 cases (à 1)
//info(1,1)=pol
//info(1,2)=erreur
info=list();
info(1)=pol;
info(2)=erreur;
endfunction
function info=rechercheMcarre(mp,degreMax)
reponse= mcarre2(mp,1) ;
erreur=reponse(2)
lePolynome=reponse(1)
for degre=2 : degreMax do
reponse= mcarre2(mp,degre);
nouvelleErreur=reponse(2)
if ( nouvelleErreur < erreur) then
erreur=nouvelleErreur ;
lePolynome=reponse(1);
end
end
info=list(); //liste vide : une sorte de tableau dynamique
info(1)=erreur;
info(2)=lePolynome;
endfunction
function s=spline(points)
taille= size(points) //taille est un tableau 1 ligne 2 colonnes
nbPoints=taille(1,1)
n=nbPoints-1
H=ones(n) //dimensionne un tableau de nbPoints-1 cases
//cases remplies de 1 (ones)
//boucle de calcul des hi
for i=1 : n do
H(i)=points(i+1,1)-points(i,1) // difference entre 2 abscisses
end
disp(H);
//premiere etape : calcul des valeurs Mi
A=zeros(n-1,n-1)
B=ones(n-1,1)
//pour i=1
A(1,1)=(H(1)+H(2))/3
if (n>2) then
A(1,2)=H(2)/6
end
//pour tous les cas entre 2 et n-2 : 3 valeurs par ligne ds la matrice A
for i=2 : n-2 do
A(i,i-1)=H(i)/6
A(i,i)=(H(i)+H(i+1))/3
A(i,i+1)=H(i+1)/6
end
//pour i=n-1
if (n>2) then
A(n-1,n-2)=(H(n-1))/6
A(n-1,n-1)=(H(n-1)+H(n))/3
end
disp(A)
for i=1 : n-1 do
B(i,1)= (points(i+2,2)-points(i+1,2))/H(i+1) - (points(i+1,2)-points(i,2))/H(i)
end
disp(B)
M=linsolve(A,-B)
disp(M)
//ETAPE 2 : calcul des splines !!
x=poly(0,'x')
s=zeros(n)
//premier spline
s(1)=M(1,1)*(x-points(1,1))*((x-points(1,1))^2-H(1)^2)/(6*H(1))+
points(1,2)*(points(2,1)-x)/H(1)+points(2,2)*(x-points(1,1))/H(1)
//tous les splines intermediaires
for i = 2 : n-1 do
s(i)=M(i-1,1)*(points(i+1,1)-x)*((points(i+1,1)-x)^2-H(i)^2)/(6*H(i))+M(i,1)*(x-points(i,1))*((x-
points(i,1))^2-H(i)^2)/(6*H(i))+ points(i,2)*(points(i+1,1)-x)/H(i)+points(i+1,2)*(x-points(i,1))/H(i)
end
//dernier spline
s(n)=M(n-1,1)*(points(n+1,1)-x)*((points(n+1,1)-x)^2-H(n)^2)/(6*H(n))+ points(n,2)*(points(n+1,1)-
x)/H(n)+points(n+1,2)*(x-points(n,1))/H(n)
endfunction
function Y=neuville(mp,X)
dimensions= size(mp)
nbpoints=dimensions(1,1)
T=zeros(nbpoints,nbpoints+1)
T(:,1)=mp(:,1)
T(:,2)=mp(:,2)
for colonne=3:nbpoints+1 do
for ligne=1:nbpoints-colonne+2 do
T(ligne,colonne)=( (X-T(ligne,1))*T(ligne+1,colonne-1) - (X-T(ligne+colonne-2,1) )* T(ligne,colonne-
1) ) / ( T(ligne+colonne-2,1)-T(ligne,1) )
end
end
disp(T)
Y=T(1,nbpoints+1)
endfunction