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






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








"Aux âmes bien nées, la valeur n'attend point le nombre des années"   Corneille