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

I.3 - Méthode De Gauss - Seidel

Objectif : Résolution d'un système linéaire d'une manière itérative

On utilise cette méthode Pour les très grosses matrices, Elle converge vers la solution progressivement et plus rapidement.

Idée de base est de résoudre une équation de type : F(x)=X ; avec une suite de type : Xk+1 =F(Xk) ;X0 donnée.

Si |Xk+1 - Xk | <î alors Xk solution.

Pour faire ça on décompose la matrice A tel que A = F - E ; alors

AX=BF(F--E)X=BIFX--EX=BIFX=EX+B

I X=F6'EX+F6'BIX=?X+K

F=(

0

0 a22

~ ~ ~ ~

0 0
·
·
· ann

a11 0

~

~

0

1 S 0 0

a11

V

0 1 a22

S ~ 0 U

~ ~ ~ ~ U

0 0
·
·
· 1 ann

S T

alors F6' =

n

2n

H = ~0 --a2 ~ --a --a2 0 ~ --a

~ ~ ~ ~
--ani --an2 ~ 0

Donc à chaque itération on a :

t6 n

1

t 7W.8 = 7'.' 8 -- > atix, 7W8

X bt -- > at,x, Y ; j: 1, 2

attj=1 j=t+1

Remarque : pour assurer la convergence il faut que A soit dominante. Le programme

//TP3 Calcul Numérique //Méthode Gauss-Seidel

#include<iostream.h> #include<iomanip.h> #include<math.h> #include<conio.h> #include<alloc.h>

double **DefMat(int n,int m)//Allocation dynamique du matrice {double * *tmp=(double* *)malloc(n*sizeof(double*)); for(int i=0;i<n;i++)

tmp[i]=(double*)malloc(m*sizeof(double));

return tmp;

}

void charger(double **M,int n,int m)//Chargement du matrice {int x=0;

for(int i=0;i<n;i++)

{for(int j=0;j<m;j++)

{cin>>M[i] [j];

gotoxy(x+=8,wherey()- 1);

}

cout<<endl;

x=0;

}

}

int dominante(double **A,int n)//vérification du domination {for(int i=0;i<n;i++)

{double som=0;

for(int j=0;j<n,j !=i;j++) som+=fabs(A[i] [j]);

if(som >= fabs(A[i][i]) ) return 0;

}

return 1;

}

double* Xkplus1(double **A,double *X0,int n)//calcul du X(k+1) {double *tmp=(double*)malloc(n*sizeof(double));

for(int i=0;i<n;i++)

{double S 1=0,S2=0;

for(int j=0;j<=i-1 ;j++) S1+=A[i][j]*tmp[j]; for( j=i+1;j<n ;j++) S2+=A[i][j]*X0[j];

tmp[i]=(double)(A[i] [n] - S1 - S2)/(double)A[i] [i]; }

return tmp;

}

//test de convergence

short test(double *X0,double *eps,double *Xk,int n) {for(int i=0;i<n;i++)

if( fabs(Xk[i] - X0[i]) > eps[i]) return 0;

return 1;

}

//resolution

double *Solve(double **A,double *X0,double *eps,int n,int kmax=6) {for(int k=0;k<kmax;k++)

{double *Xk=Xkplus1 (A,X0,n);

short ok=test(X0,eps,Xk,n);

if(ok) return Xk;

X0=Xkplus 1 (A,X0,n);

}

return NULL;//en cas pas de solution en kiem itération }

void main()

{char rep;

do

{clrscr();

cout<<" Méthode De Gauss - Seidel\n";

int dim;

cout<<"\nEntere La Dimension Du Matrice :";

cin>>dim;

//X0 initial

double *X0=(double*)malloc(dim*sizeof(double)); for(int t=0;t<dim;t++) X0[t]=1;

//le vecteur epselon

double *eps=(double*)malloc(dim*sizeof(double)); for( t=0;t<dim;t++) eps[t]=0.2;

//La matrice augmentée A

double * *A=DefMat(dim,dim+1);

charger(A,dim,dim+1 );//Chargement de A

cout<<endl;

int ok=dominante(A,dim);

if(ok)//test de la domination

{//Resolution

double * Sol=Solve(A,X0,eps,dim);

if(Sol) for(t=0;t<dim;t++) cout<<"X"<<t<<" = "<<setprecision(2)<<Sol[t]<<endl; else cout<<"On a pas une solution par cette méthode ! ! !";

free(Sol);//libération du mmoire

}

else cout<<"\nLa Matrice n'est pas dominante ! ! !\n"; //libération du mémoire

free(A);free(X0);free(eps);

cout<<"\nVoulez vous répéter o/n : ";cin>>rep;

}while (rep == 'o');

}

II - Interpolation D'une Fonction Par Un Polynôme

On a un ensemble de n+1 points : x0 .... Xn et pour chaque point on connaît la valeur d'une fonction f inconnue (à-priori): f(x0) ... . f(xn)

La question qui se pose c'est : Quelle est la valeur de f sur les points intermédiaire ?

Pour cela on doit supposer un modèle mathématique de f qui est souvent un polynôme.

Pour l'interpolation polynomiale on a 2 méthodes :

Méthode De Newton

Méthode De Lagrange

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








"Ceux qui vivent sont ceux qui luttent"   Victor Hugo