II.1 - Méthode De Newton
Objectif : Obtention d'un polynôme à
partir d'une table de points
Cette méthode est basée la notion de
Différences divisées, où le polynôme d'interpolation
est obtenu comme ça :
P~(x) =
f [x0] + (x - x0)f [x0, x1] + (x - x0)(x -
x1)f[x0, x1, x2] +
erreur .
Les différences divisées sont obtenues comme
suit :
f[x0] = f(x0)
f[x0] - f[x1]
f [x0,x1] =
~ + (x - x0)(x - x1) + · · ·
+ (x - x~_1)f[x0, x1, , x] +
x0 - x1
XO6Xk
Et dans le cas général f[x0,
x1, ... ,xk] = f[xo,xl,...,xk_1]--f[xk_1,xk]
Le programme
//TP4 Calcul Numérique //Polynome De Newton
#include<iostream.h> #include<alloc.h>
#include<conio.h> #include<math.h>
double **NewMat(int n)//Allocation dynamique du matrice
{double * *tmp=(double* *)malloc(2*sizeof(double*));
for(int i=0;i<2;i++)
tmp[i]=(double*)malloc(n*sizeof(double));
return tmp;
}
//Remplissage du tableau des points(Xi,Yi)
void remplir(double **tab,int n)
{ cout<<"Xi:\n";
cout<<"Yi:";
gotoxy(4,wherey()- 1); int x=wherex();
for(int j=0;j<n;j++)
{for(int i=0;i<2;i++)
{cin>>tab[i] [j];
gotoxy(x,wherey());
}
gotoxy(x+=4,wherey()-2);
}
cout<<"\n\n";
}
//Obtention des coefficients du polynome double *coef(double
**tab,int n)
{double *tmp=(double*)malloc(n*sizeof(double)); tmp[0]=tab[ 1]
[0] ;//premier coef
//deuxime coef
tmp[1]=double(tab[1][0]-tab[1][1])/double(tab[0][0]-tab[0][1]);
for(int i=2;i<n;i++)
{double
t=double(tab[1][i-1]-tab[1][i])/double(tab[0][i-1]-tab[0][i]);
tmp[i]=double(tmp[i- 1] -t)/double(tab[0] [0] -tab[0] [i]);
}
return tmp;
}
//Affichage du polynome
void EcrirePoly(double **tab,double *coef,int n) {
cout<<coef[0]<<" ";
for(int i=1 ;i<n;i++)
{if(coef[i] !=0)
{
(coef[i]<0)?cout<<"+("<<coef[i]<<")":cout<<"+"<<coef[i]<<"
"; for(int k=0;k<i;k++) cout<<"(X-"<<tab[0] [k]<<")";
}
}
}
void main()
{clrscr();
cout<<"\t\t\t\tPolynome De Newton\n"; cout<<"Entrer
le nombre des points n ="; int n;
cin>>n;//nombre des points
double **Tabl=NewMat(n);//table des points cout<<"Enter la
table des points\n"; remplir(Tabl,n);
double *cf=coef(Tabl,n);//table des coef cout<<"Le Polynome
de Newton\nP(x)="; EcrirePoly(Tabl,cf,n);
free(Tabl);free(cf);//liberation memoire getch();
}
II.2 - Méthode De Lagrange
Obiectif : Obtention d'un polynôme à
partir d'une taffe de points
_ _
Le polynôme d'interpolation de Lagrange est obtenu par
cette
combinaison :
n
pn (x) = 1 Lk (x)f (xk )
k=0
Où
n
Lk(x) = e x -- xi
xk--xi
i=0,i*k
Le programme
//TP5 Calcul Numerique //Polynome De Lagrange
#include<iostream.h> #include<conio.h>
#include<alloc.h>
double **DefPt(int n)//allocation dynamique de la table des
points
{double **tmp=(double**)malloc(2*sizeof(double*));
for(int i=0;i<2;i++)
tmp[i]=(double*)malloc(n*sizeof(double));
return tmp;
}
//remplissage de la table des points
void remplir(double **tab,int n)
{cout<<"Xi: \n";
cout<<"Yi:";
gotoxy(4,wherey()-1); int x=wherex();
for(int j=0;j<n;j++) {for(int i=0;i<2;i++)
{cin>>tab[i][j];
gotoxy(x,wherey());
} gotoxy(x+=4,wherey()-2);
}
cout<<"\n\n";
}
//calcul et affichage des Lk(x)
int Lk(double **point,int i,int n)
{cout<<"L"<<i<<"(x)=";
double tmp=1;
for(int j=0;j<n;j++)
if(j !=i)
{ cout<<"(x";
if(point[0] [j]<0)
cout<<"+"<<(-1 )*point[0] [j];
if(point[0] [j]>0) cout<<"-"<<point[0] [j];
cout<<")";
tmp*=point[0] [i] -point[0] [j];
}
if(tmp>0)
cout<<"/"<<tmp<<endl;
else
if(tmp<0)
cout<<"/("<<tmp<<")"<<endl;
else
{ cout<<"/"<<tmp<<endl;;
cout<<"\ndivision par zero puisque la condition de points
distincts n'est pas
verifiee"<<endl;
return 0;
}
return 1;
}
//affichage du poly d'interpolation de lagrange
void PolyLagrange(double **point,int n)
{for(int i=0;i<n;i++)
{int ok=Lk(point,i,n);
if(!ok) return;
}
cout<<"Pn(x)=";
for(i=0;i<n;i++)
if(point[ 1] [i])
if(i!=n-1)
cout<<point[ 1] [i]<<"L"<<i<<"(x)+";
else
cout<<point[ 1] [i]<<"L"<<i<<"(x)";
}
void main()
{clrscr();
cout<<"\t\t\t\tPolynome De Lagrange\n";
cout<<"Entrer le nombre des points n ="; int n;
cin>>n;//nombre des points
double **Point=DefPt(n);//table des points cout<<"Enter la
table des points\n";
remplir(Point,n);
cout<<"Le polynome de Lagrange \n";
PolyLagrange(Point,n);
getch();
}
III - Résolution D'une
Equation Non Linéaire De Type f(x) = 0 Dans la pratique, la
plupart des problèmes se ramènent à la
résolution
d'une équation de la forme : f(x) = 0 ,
donc le problème consiste à trouver
la racine dont on sait l'existence et dont, parfois, on
connaît une valeur approchée.
Les méthodes de résolution sont toujours des
méthodes itératives.
|