Méthode de Gauss
Le météorologiste peut se retrouver à résoudre un systeme d'équations généré par les relevés d'observations visant à établir une prévision .
Une seule méthode s'impose : la méthode de Gauss .
1 ) Généralités
a ) Méthode du pivot
b ) Méthode de Cramer ( calcul direct )
Un système de N équations à N inconnues intervient souvent dans de nombreux phénomènes atmosphériques :
a11x1 + a12x2 + ... + anxn = y1
a22x1 + a22x2 + ... + a2nxn = y2
...
an1x1 + an2x2 + ... + annxn = yn
Ce systeme peut se résoudre en considérant une matrice A telle que Ax = y avec x vecteur propre .
Il existe alors trois possibilités de résolution de ce systeme .
On considère une matrice T telle que T = Ay .
La méthode du pivot consiste à transformer T en une nouvelle matrice T' telle que T' = ( 1 0 ... 0 x1, 0 1 ... 0 x2, ..., 0 0 ...1 xn ) où x1, x2, ..., xn représentent les solutions du système .
Concrètement, il faut effectuer les opérations suivantes ( i lignes, j colonnes ) :
L(i) >> L(i) - a(ij)L(j)/a(jj) pour i#j
L(j) >> L(j)/a(jj)
b ) Méthode de Cramer ( calcul direct )
Elle revient à utiliser la formule x(i) = [ det (A0,A1,A2,...,A(j-1), Y , A(j+1),...A(n)) ] / [ det ( A0,A1,A2,...,A(n) )] .
Un calcul trop compliqué nécessitant à chaque ligne du système ( n+1 )! termes !
Elle utilise la technique du gradient conjugué, c'est-à-dire que seuls les éléments non nuls de la matrice A sont stockés nécessitant très peu d'opérations par rapport à la méthode de Cramer .
Pour la mettre en évidence, nous pouvons nous servir des fonctions flops et whos sur le logiciel Scilab .
2 ) Exemple de programme sous Scilab
Création de la fonction Gauss sous un fichier au nom gauss.sci :
function x=fct_gauss(A,b)
// resolution de A.x=b par la methode de Gauss //
[imax,jmax]=size(A);
for j=2:imax
Aex=A((j-1):imax,(j-1):imax);
bex=b((j-1):imax);
kp=find(abs(Aex(:,1))==max(abs(Aex(:,1))));
Aex=echange(Aex,kp,1)
bex=echange(bex,kp,1)
for i=2:imax-j+2
m=Aex(i,1)/Aex(1,1);
Aex=combin(Aex,i,1,-m);
bex=combin(bex,i,1,-m);
A((j-1):imax,(j-1):imax)=Aex;
b((j-1):imax)=bex;
end
end
x=remonte(A,b);
Appel de la fonction gauss pour résoudre le systeme d'équations :
A=[8 14 2 -6;-5 5 9 10;2 -5 3 7]; // transposée de la matrice du systeme //
A=A';
b=[10;5;23;-4];
getf('gauss.sci') // Appel de la fonction Gauss //
a=gauss(A,b) // determination des solutions ( vecteur x )//