1 * GAUSS
10 * résolution d'une équation matricielle AX=B
11 * Méthode de GAUSS
20 CHARGER a0,1,'#matri.8'
25 SI IND(a0)#2 ALORS DEBUT AFFICHER 'matrice non rectangulaire';TERMINER FIN
30 n←IND(a0,1);SI n#IND(a0,2) ALORS DEBUT AFFICHER 'matrice non carrÉe';TERMINER FIN
100 * on inverse la matrice a0 dans la matrice a1
110 TABLEAU a[n,2*n],a1[n,n],x[n],prod[n,n]
115 FAIRE 120 POUR i←1 JUSQUA n
116 FAIRE 117 POUR j←1 JUSQUA n;a[i,j]←a0[i,j]
117 *fin de boucle 116
118 FAIRE 119 POUR j←n+1 JUSQUA 2*n;a[i,j]←SI j=i+n ALORS 1 SINON 0
119 * fin de boucle 118
120 * fin de boucle 115
200 * on commence le processus de triangulation
201 FAIRE 300 POUR i←1 JUSQUA n-1
205 * on teste si pivot nul : si OUI il faut Échanger la ligne I avec une autre ligne K
210 SI a[i,i]#0 ALORS ALLER EN 220
212 FAIRE 213 POUR k←i+1 JUSQUA n;SI a[k,i]#0 ALORS ALLER EN 215
213 *fin de boucle 213
214 AFFICHER 'tous coefficients nuls ; matrice non inversible';TERMINER
215 * on échange ligne I avec ligne K
216 FAIRE 217 POUR j←1 JUSQUA 2*n;s←a[i,j];a[i,j]←a[k,j];a[k,j]←s
217 * fin de boucle 216
220 p←a[i,i];FAIRE 221 POUR j←i JUSQUA 2*n;a[i,j]←a[i,j]/p
221 * fin de boucle 220
225 FAIRE 240 POUR k←i+1 JUSQUA n
230 FAIRE 235 POUR j←1 JUSQUA 2*n;a[k,j]←a[k,j]-a[k,i]*a[i,j]
235 * fin de boucle 230
240 * fin de boucle 225
250
300 * fin de boucle 201
310 SI a[n,n]=0 ALORS DEBUT AFFICHER 'problème : matrice non inversible';TERMINER FIN
320 p←a[n,n];FAIRE 321 POUR j←n JUSQUA 2*n;a[n,j]←a[n,j]/p
398
399
400 * la partie gauche de A est maintenant triangulaire supérieure
401 * avec des 1 sur la diagonale
402
403 * on résoud AX=B pour chacun des vecteurs colonnes
405 FAIRE 430 POUR j←n+1 JUSQUA 2*n
406 * pour un vecteur colonne donné
410 x[n]←a[n,j]
415 FAIRE 420 POUR i←n-1 PAS -1 JUSQUA 1
416 s←a[i,j]
417 FAIRE 418 POUR k←i+1 JUSQUA n-1;s←s-a[k,j]*x[k]
418 * fin boucle 418
419 x[i]←s
420 *fin boucle 415
425 * on recopie X dans la colonne J de la matrice A1
426 FAIRE 427 POUR k←1 JUSQUA n;a1[k,j-n]←x[k]
427 * fin de boucle 426
500 * on teste le produit A0*A1
510 &prod(a0,a1,prod)
520 AFFICHER prod;TERMINER
700
800 * création d'un fichier test
805 n←3;TABLEAU p[n,n],q[n,n],r[n,n]
808 FAIRE 808 POUR i←1 JUSQUA n;FAIRE 808 POUR j←1 JUSQUA n;p[i,j]←0;q[i,j]←0
810 t←ATG(1);c←COS(t);s←SIN(t)
811 p[1,1]←1;p[2,2]←c;p[3,3]←c;p[3,2]←s;p[2,3]←s
812 t←ATG(1)/2;c←COS(t);s←SIN(t)
813 q[2,1]←1;q[1,2]←c;q[3,3]←c;q[3,2]←s;q[1,3]←s
820 &prod(p,q,r)
830 GARER r,1,'#matri.8';TERMINER
840
900 PROCEDURE &prod(p,q,r)
910 FAIRE 920 POUR i←1 JUSQUA n;FAIRE 919 POUR j←1 JUSQUA n;s←0
915 FAIRE 915 POUR k←1 JUSQUA n;s←s+p[i,k]*q[k,j]
917 r[i,j]←s
920 *fin des boucles en 910
930 RETOUR