• Aucun résultat trouvé

Td corrigé Guelton Rodolphe - Free pdf

N/A
N/A
Protected

Academic year: 2022

Partager "Td corrigé Guelton Rodolphe - Free pdf"

Copied!
1
0
0

Texte intégral

(1)

Guelton Rodolphe Le 20 Janvier 2006 Tonon Sébastien

Groupe K

Projet Tutoré de Mathématiques

Résolution des Systèmes Linéaires quelconques : A*X = B

(2)
(3)

Sommaire

Introduction ……… Page 4

I) Explication et analyse mathématiques des méthodes ………..Page 5 A) La méthode de Jordan ………...….Page 5 1) Principe de la méthode de Jordan………..………Page 5 2) Un exemple ………...…Page 6 B) La méthode de Gauss...………...Page 7 1) Principe de la méthode de Gauss………...Page 7 2) Un exemple………....Page 8 C) Les différentes méthodes de résolution………..…….Page 9 1) La méthode du pivot partiel……….………..Page 9 2) La méthode du pivot maximum relatif………..Page 9 3) La méthode du pivot maximum absolu……….Page 9

II) Explication des structures utilisées dans le programme……….………Page 10 A) La structure graphique………...………..….Page 10 1) Le menu général………….……….Page 10 2) Les masques de saisie……….Page 11 3) L’affichage des résultats………...……..Page 12 4) Les messages d’erreurs………...Page 12 B) La structure du code……….Page 13 1) Les classes………..Page 13 2) Les différentes méthodes………...Page 13

III) Exemples et analyse……….……….…Page 15 A) Exemple n° 1 : Gauss et les 3 stratégies………...Page 15 B) Exemple n° 2 : Jordan et les 3 stratégies……….……….Page 16 C) Exemple n° 3 : Jordan avec la stratégie 0………..Page 17 Conclusion……..………..Page 18

(4)

Introduction :

Ce projet a été réalisé dans le cadre de notre 2ème Année de DUT informatique. Le projet avait pour but de résoudre des systèmes linéaires quelconques de la forme A*X = B, en utilisant les méthodes de Jordan et de Gauss. Une première partie du projet devait pouvoir résoudre tout type de matrice quel soit inversible ou non, carrée ou non avec la méthode de Jordan. La seconde partie avait pour but de résoudre, avec les méthodes de Gauss et Jordan, des grandes matrices carrée et inversible.

Notre compte rendu se présente en 3 parties. Une première dans laquelle nous expliquons les méthodes mathématiques utilisées, une seconde dans laquelle nous présentons les structures utilisées dans notre logiciel. Et dans une dernière partie nous montrons quelques exemples d’exécution.

Nous tenons, également, à remercier Madame Everaere et Monsieur Benchiboun, nos tuteurs pour ce projet, pour l’aide qu’ils ont pu nous apporter.

(5)

I) Explications et analyse mathématiques des méthodes A)

La méthode de Jordan

1)

Principe de la méthode de Jordan

La méthode de Jordan se déroule en 4 étapes.

La 1ère étape consiste à choisir, en fonction de la stratégie sélectionnée (cf. C), le pivot.

Dans un deuxième temps, on rempli le reste de la colonne du pivot avec des 0. Puis, ensuite, on recopie tout simplement la ligne du pivot.

Pour terminer, on rempli le reste de la matrice en utilisant la formule suivante :

A

ij(k)

= A

ij(k-1)

– A

ik(k-1)

/A

kk(k-1)

*A

kj(k-1)

i : l’indice de la ligne.

j : L’indice de la colonne.

k : le numéro de l’étape en cours

On réitère ensuite le même processus pour le minimum entre le nombre de ligne et de colonne. A la fin de la résolution, on obtient une matrice AB de la forme, pour une matrice 3x3 :

Matrice Vecteur B

( a | 0 | 0 ) ( d ) ( 0 | b | 0 ) ( e ) ( 0 | 0 | c ) ( f )

Si le rang de la matrice A est égale au rang de la matrice AB alors il existe des solution, sinon le système linéaire n’a pas de solution. Si le système a des solutions et que la matrice est inversible, alors il y a une seule et unique solution sinon une infinité.

Pour calculer la solution particulière, on remplace alors la matrice par un système d’équation de ce type :

ax + 0 + 0 = d 0 + by + 0 = e 0 + 0 + cz = f

On obtient la solution particulière en divisant, pour chaque ligne, la valeur du deuxième membre (le vecteur B) par le pivot. Si besoin, on complète la solution par des zéros pour avoir le même nombre de composante dans la solution que de colonnes dans la matrice.

Par exemple, ici

(d/a) Sp. = (e/b)

(f/c)

Pour savoir si notre résultat et loin ou pas de la vérité il faut calculer le résidu. Le résidu est la norme du vecteur erreur E, soit le maximum de ses composantes. Le vecteur erreur est calculer de la manière suivante : E = A * X - B

La norme est égale à Max|Ei|.

(6)

Pour obtenir les vecteurs du noyau, il faut exprimer chaque colonne, hors de la plus grande matrice inversible, en fonction des colonnes de la plus grande matrice inversible.

Pour finir la solution générale s’exprime de la façon suivante :

Sn. = Sp. + k

1

*(V

1noyau

) + k

2

*(V

2noyau

) + …. + k

n

*(V

nnoyau

) 2)

Un exemple

Soit la Matrice A : (-1 | 1 | 2 ) et le Vecteur B : (0) ( 1 | 1 | 1 ) (1) ( 2 | 1 | 1 ) (2)

On résolvera ce système linéaire par la méthode de Jordan en utilisant la méthode des pivots partiels.

 (-1 | 1 | 2 ) (0) ( 0 | 2 | 3 ) (1) ( 0 | 3 | 5 ) (2)

 (-1 | 0 | 0.5 ) (-0.5) ( 0 | 2 | 3 ) (1) ( 0 | 0 | 0.5) (0.5)

 (-1 | 0 | 0 ) (-1) ( 0 | 2 | 0 ) (2) ( 0 | 0 | 0.5) (0.5) Rang de A = 3

Rang de AB = 3

Nous allons donc pouvoir chercher la solution. La solution est la solution du système suivant :

-x + 0 + 0 = -1 0 +2y+ 0 = 1 0 + 0 + 0.5z = 0.5

( 1 ) Le système suivant à pour solution : S = ( -1 ) ( 1 ) (0)

Le vecteur erreur E = (0) (0) Donc le résidu est ici égal à zéro.

La matrice étant inversible, il n’y a pas de vecteur noyaux. Et il n’y a donc qu’une seule solution : la solution particulière trouvé précédemment.

(7)

B)

La méthode de Gauss

1)

Principe de la méthode de Gauss

La méthode de Gauss, tout comme la méthode Jordan, se réalise en 4 étapes.

Lors de la première étape on choisi le pivot en fonction de la méthode de résolution choisi au préalable (cf. C). Si l’on ne trouve pas de pivot qui ne puisse convenir (plus aucune valeur différente de 0) alors la matrice AB n’est pas inversible et dans notre cas, nous nous arrêtons.

Dans un deuxième temps, s’il s’est avéré que la 1ère étape soit réalisé avec succès, on recopie tout simplement la ligne du pivot. Ensuite dans une troisième étape, on rempli la colonne du pivot avec des zéro, contrairement à la méthode de Jordan l’ajout de zéro ne se fait uniquement pour les lignes en dessous du pivot les autres lignes ne changent pas.

Dans un dernier temps, on réalise le calcul suivant, pour toutes les autres cases de la matrice AB :

A

ij(k)

= A

ij(k-1)

– A

ik(k-1)

/A

kk(k-1)

*A

kj(k-1)

i : l’indice de la ligne.

j : L’indice de la colonne.

k : le numéro de l’étape en cours

On recommence la même technique pour le nombre de colonne de la matrice car ici nous considérons des matrices carrées.

Lorsque la résolution par la méthode de Gauss est terminée, on se retrouve avec une matrice de la forme suivante :

Matrice Vecteur B

( a | b | c ) ( g ) ( 0 | d | e ) ( h ) ( 0 | 0 | f ) ( i )

Pour calculer la solution, on remplace alors la matrice par un système d’équation de ce type :

ax + by +cz = g 0 + dy + ez = h 0 + 0 + fz = i

Ce système d’équation est alors très facile à réaliser : on calcule la valeur de z puis en remplaçant z sur la ligne du dessus, la valeur de y et ainsi de suite jusqu’à résoudre le système.

(8)

La solution peut alors ensuite s’écrire de la forme :

(x) S = (y) (z)

Pour finir et pour savoir si notre résultat et loin ou pas de la vérité il faut calculer le résidu. Le résidu est la norme du vecteur erreur E, soit le maximum de ses composantes.

Le vecteur erreur est calculer de la manière suivante : E = A * X - B La norme est égale à Max|Ei|.

2)

Un exemple

Soit la Matrice A : (-1 | 1 | 2 ) et le Vecteur B : (0) ( 1 | 1 | 1 ) (1) ( 2 | 1 | 1 ) (2)

On résolvera ce système linéaire par la méthode de Gauss en utilisant la méthode des pivots partiels.

 (-1 | 1 | 2 ) (0) ( 0 | 2 | 3 ) (1) ( 0 | 3 | 5 ) (2)

 (-1 | 1 | 2 ) (0) ( 0 | 2 | 3 ) (1) ( 0 | 0 | 0.5) (0.5)

Nous sommes arrivé à la fin de la matrice. Nous allons donc pouvoir chercher la solution. La solution est la solution du système suivant :

-x + y + 2z = 0 0 +2y+ 3z = 0 0 + 0 + 0.5z = 0.5

( 1 ) Le système suivant à pour solution : S = ( -1 ) ( 1 ) (0)

Le vecteur erreur E = (0) (0) Donc le résidu est ici égale à zéro .

(9)

C)

Les différentes méthodes de résolution

1)

Le pivot partiel

La méthode du pivot partiel consiste à ne s’intéresser et à modifier l’ordre des lignes de la matrice uniquement lorsque l’on rencontre un pivot nul. Si l’on ne trouve pas de pivot non nul alors on quitte la résolution et l’on considère qu’il n’y a pas de solution. Dans le programme, cette méthode est représentée par la stratégie numéro 1.

2)

Le pivot maximum relatif

La méthode du pivot maximum relatif consiste à rechercher dans la colonne du pivot la valeur maximale et d’échanger en conséquence les lignes, ceci pour chaque colonne quelque soit la valeur du pivot. Si l’on ne trouve pas de valeur plus grande que zéro, ce qui revient à dire que la colonne n’est constitué que deux zéro, alors on quitte la résolution et l’on considère qu’il n’y a pas de solution. Dans le programme, cette méthode est représentée par la stratégie numéro 2.

3)

Le pivot maximum absolu

La méthode du pivot maximum absolu consiste à rechercher dans toute la sous matrice restante la valeur la plus grande et d’échanger lignes et colonnes en conséquence, ceci pour chaque pivot qu’il soit nul ou non. Si dans toutes la sous matrice on ne trouve pas de valeur non nul alors on dit que la matrice n’est pas inversible et qu’il n’y a donc pas de solution. Attention pour cette méthode avant de calculer la solution il faut remettre les colonnes qui aurait pu bouger suite à d’éventuelle permutation. Dans le programme, cette méthode est représentée par la stratégie numéro 3.

(10)

II) Explications des structures utilisées dans le programme

A)

La structure graphique

1)

Le menu général

Il nous permet de réaliser toutes les actions que ce petit logiciel est capable de faire. C’est la fenêtre principale du programme.

Lorsque l’utilisateur clique sur le bouton saisie matrice, un onglet s’ouvre et nous laisse le choix entre les 3 méthodes de saisie différentes : saisie manuelle, saisie par formule et saisie aléatoire.

Lorsque l’utilisateur clique sur le bouton résolution de matrice, un onglet s’ouvre et lui donne le choix entre les différentes méthodes qu’il peut utilisé : méthode de Gauss ou

(11)

méthode de Jordan. Lorsque le choix de la méthode est fait un autre onglet s’ouvre et l’utilisateur peut alors choisir la méthode de pivot qu’il souhaite utilisée.

Sur le menu, il y a également 4 images. La première en partant de la gauche permet de voir la dernière matrice saisie par l’utilisateur. Le bouton à coté permet quant à lui d’aller voir les graphique de performance (rapidité et précision). Le suivant permet d’afficher le manuel d’utilisation (c'est-à-dire ce dossier). Le dernier permet d’afficher l’aide du logiciel.

2)

Les masques de saisie

Ce masque de saisie est celui de la saisie manuelle, le logiciel demande d’abord le nombre de colonnes et de lignes que doit avoir la matrice pour pouvoir construire une matrice vide et le masque de saisie qui permettra à l’utilisateur de saisir lui-même les valeurs dans la matrice.

Après avoir saisie le nombre de lignes et de colonnes, le logiciel ouvre une nouvelle fenêtre contenant la matrice vide dans laquelle l’utilisateur pourra donc saisir ses valeurs.

Pour valider sa saisie il lui suffira d’appuyer sur le bouton valider.

(12)

Ce masque de saisie est celui qui s’affiche lorsque l’utilisateur demande la saisie d’une matrice par formule. Le logiciel demande toutes les informations nécessaires pour construire la matrice. Dans ce mode de saisie, l’utilisateur ne peut pas saisir de valeur lui-même : tout est fait par le logiciel.

Le masque de saisie pour la saisie aléatoire se compose de trois champs. L’utilisateur doit fournir au logiciel le nombre de lignes et de colonnes que devra avoir la matrice, ainsi que la valeur maximale qui pourra être mise au hasard par le logiciel dans la matrice. La valeur minimale sera elle l’inverse de la valeur maximale.

Exemple : si valeur max est égale à 4 alors les valeurs de la matrice seront comprise entre -4 et 4.

3)

L’affichage des résultats

Il existe deux types de fenêtre pour l’affichage des résultats. Un premier type pour afficher la matrice résultat après une résolution et un second pour afficher les solutions et toutes les autres informations complémentaires. L’affichage des informations complémentaires n’est pas obligatoire le choix est laissé à l’utilisateur : avant l’affichage, on lui demande si oui ou non il désire voir les informations complémentaires. Voici deux exemples d’affichage de résultat :

L’affichage de la matrice résultat Les informations complémentaires

4)

Les messages d’erreurs

Les messages d’erreurs s’affichent dès que l’utilisateur commet une erreur dans une de ses saisies : une lettre pour nombre de colonnes, un blanc laissé dans une matrice lors d’une saisie manuelle…. Ces messages d’erreurs bloquent le logiciel jusqu’à ce que l’utilisateur ai lu et corrigé ses erreurs. Voici un exemple de message :

(13)

B)

La structure du code

1)

Les classes

Le logiciel se divise en 9 classes différentes. Ces classes ne gèrent pas toutes le même aspect du logiciel. Il y a une classe qui s’occupe de toutes la partie calcul sur les matrices, c’est le coeur du logiciel, six autres classes gèrent l’aspect graphique, les deux dernières classes

« observent » l’utilisateur est font agir les sept classes précédentes en fonction de l’action de l’utilisateur.

Les classes de graphisme :

Graphique.java, cette classe permet l’affichage du graphique des performances. Menu.java permet d’afficher le menu général ainsi que tout les différents onglets dans les deux boutons supérieurs. MatriceView.java permet d’afficher la fenêtre résultat lorsqu’une résolution est terminée. SaisieAleatoireView.java, Manuel.java et SaisieFormuleView servent à afficher les differentes masques de saisies qui permettent la saisie des matrices.

Les classes d’interaction : MenuListener.java et BoutonListener.java « écoutent » les boutons pour savoir sur quoi a cliqué l’utilisateur et donc faire agir les différentes classes en conséquence .

La classe de travail : Matrice.java, c’est la classe la plus importante du logiciel. Sans cette classe le logiciel ne fait rien du tout. C’est dans cette classe que tous les résolutions et toutes les solutions sont calculées.

2)

Les différentes méthodes

La classe principale étant la classe Matrice.java, on ne s’intéressera qu’à cette dernière dans cette partie. Les autres classes étant surtout faites pour rendre le logiciel un peu plus « sexy ».

Le principal objet utilisé est l’objet Matrice, c’est dans cet objet que l’on range la matrice et le vecteur B lors de la construction d’une matrice. Il se compose de plusieurs éléments. Tout d’abord deux entiers qui sont lignes et colonnes, ces propriétés sont nécessaire lors de la résolution de matrice. Les deux autres éléments qui caractérisent une matrice sont deux tableau de « double » dans lesquelles les valeurs de la matrice, pour l’un, et les valeurs du vecteur B, pour l’autre sont rangés.

Descriptif d’un objet Matrice : int ligne;

int colonne;

double[][] matrice;

double[] vecteurB;

Pour réaliser les différents calculs, nous avons du utiliser plusieurs sorte de méthode. Il a d’abord fallu construire les matrices, à l’aide des constructeurs. Puis dans un deuxième temps, nous avons eu besoin d’accéder aux différents éléments d’un objet Matrice, nous avons donc

(14)

codé une série d’accesseurs sur notre objet Matrice. Par la suite nous avons écrit quelques méthodes « utilitaires » pour nous simplifier les manipulations de matrice. Pour finir nous avons donc codé les méthodes de Gauss et de Jordan qui résolve les systèmes linéaires.

Les constructeurs de Matrice : public Matrice (int l, int c, int g) ;

public Matrice (double a, double b, double c, double d, double e, double f,int l, int col) ;

public Matrice(int l, int c) ;

Les accesseurs : public int getLigne() ; public int getColonne();

public double getElemMatrice(int l,int c);

public double getElemVecteur(int l) ;

public void setElemMatrice(int l,int c,double valeur) ; public void setElemVecteur(int l,double valeur) ; public double[][] getMatrice() ;

public double[] getVecteur() ;

public void setInversion(int[] invers) ; public int[] getInversion() ;

Les méthodes utilitaires : public int rangA()

public void echangerLigne(double [] [] tab, int ligne1, int ligne2) ; public void echangerColonne(double[] [] tab, int colonne1, int colonne2) ;

public void affichageInvers() ;

public Matrice makeMatrice(double[][] tab) ; public double[] solutionParticuliere() ; public String nbSolutions() ;

public boolean isInversible() ; public int rangAB() ;

public Matrice copieMatrice() ; public double[] soluceGauss() ;

public double erreur(Matrice mat, double[] soluce) ;

Les méthodes de résolution : public Matrice jordan(int strat) ; public Matrice gauss(int strat) ;

(15)

III) Exemples et analyse

A)

Exemple n° 1 : Gauss et les 3 stratégies

Voici la matrice qui va nous servir dans cet exemple.

Résultat avec la méthode du pivot partiel :

Résultat avec la méthode du pivot maximum relatif :

Résultat avec la méthode du pivot maximum absolu :

Les trois méthodes nous donnent la même solution, mais l’on peut constater que les

différentes stratégies provoquent des inversions de lignes et de colonnes et donc la matrice

(16)

inversible finale n’est pas la même. On peut alors se demander qu’elle stratégie est plus performante.

B)

Exemple n°2 : Jordan et les trois stratégie

Pour cet exemple nous prendrons la même matrice que dans l’exemple précédent, ainsi nous pourrons vérifier si la méthode de Jordan et la méthode de Gauss nous donnent la même solution.

Résultat avec la méthode du pivot partiel :

Résultat avec la méthode du pivot maximum relatif :

(17)

Résultat avec la méthode du pivot maximum absolu :

Les trois méthodes nous donnes les mêmes résultats, cependant on peut tout de même noter une perte de précision pour la solution avec la méthode du pivot maximum absolu. De plus, les résultats sont cohérents avec l’exemple n°1. Là aussi, on peut donc se demander qu’elle méthode de résolution est la plus performante : Gauss ou Jordan. Pour cela, on pourra utiliser les graphiques de performances.

(18)

C)

Exemple n° 3 : Jordan et la stratégie 0 Pour cet exemple nous prendrons la matrice suivante :

Résultat après résolution :

(19)

Sur cet exemple, on voit que comme le rang de A est égal au rang de B, la matrice n’est pas inversible. Ce système linéaire a donc une infinité de solution, comme l’indique la solution générale dans les résultats.

Conclusion :

Ce projet peut facilement être amélioré : la méthode de Gauss pourrait être modifié de manière à ce que l’on puisse appliquer cette dernière à des matrices non carré et pas forcément inversible. Ce projet nous aura également permis d’approfondir et d’assimiler encore un peu plus une notion vue pendant les cours magistraux, avec Monsieur Benchiboun,

(20)

et durant les TD, avec Madame Everaere. Sur un plan plus personnel, ce projet nous aura permis de gérer un véritable projet de développement d’une application.

Références

Documents relatifs

La diffusion est donc le phénomène qui permet les échanges gazeux entre les alvéoles et le sang contenu dans les capillaires d’une part et des capillaires aux cellules d’autre

« Simplicio: Laissons tomber une boule de plomb du haut du mât d’un navire au repos et notons l’endroit où elle arrive, tout près du pied du mât ; si du même endroit, on

Dans le cadre de cette volonté de construire les micro-fondations d'une théorie des modes de gouvernance, ce travail a permis de vérifier l'hypothèse selon laquelle les projets urbains

Il s’agit ici du nombre minimum d’exercices correspondant à chaque chapitre du cours et qui seront corrigés en

Différence entre la valeur des biens et services produits par une entreprise ou une branche et celle des biens et services utilisés pour la production, dite des..

Plusieurs fois dans ma vie j'ay reconnu qu'il etoit plus aisé d'avoir la paix avec le diable qu'avec les hommes, parce qu'avec ceux-cy il faut toujours faire des compliments lors

2- A partir de la solution mère S , de concentration molaire c = 3,00 mol.L -1 , on souhaite obtenir 500 mL de solution fille S’ de concentration molaire c’ = 1,50.10 -1 mol.L -1 ..

Le calcul de la marge peut se faire par l’intermédiaire de 3 indicateurs : - le taux de marge = (Marge) / (Prix d’achat).. - le taux de marque = (Marge) / (Prix