WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

TPs Calcul Numérique

( Télécharger le fichier original )
par Salim Merazga
Oum El Bouaghi - 3eme informatique 2007
  

précédent sommaire suivant

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

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

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.

précédent sommaire suivant






Extinction Rebellion







Changeons ce systeme injuste, Soyez votre propre syndic



"Des chercheurs qui cherchent on en trouve, des chercheurs qui trouvent, on en cherche !"   Charles de Gaulle