Précédent   Forum des professionnels en informatique > Autres langages > Algorithmes
Algorithmes Forum d'entraide sur l'algorithmique, l'intelligence artificielle, le traitement numérique d'images et les mathématiques. Avant de poster : Cours d'algorithmique
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/01/2012, 18h02   #1
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
Par défaut Méthode de Gauss optimisée

Salut tous,

j'ai vu sur un document que pour optimiser la methode de Gauss (minimiser les erreur d'arrondis) il faut choisir le plus grand pivot possible (et donc permurter les lignes).

je n'ai pas compris pourquoi, pourriez vous m'expliquer svp ?

=> ce que je comprends pas c'est que si on raisonne comme cela on peut se dire: je dois ajouter à chaque ligne un nombre enorme pour avoir le pivot maximal ! je comprends que ce raisonnement est faux mais j'aimerai comprendre c'est quoi cet histoire de pivot max...

merci d'avance pour votre aide
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 21h19   #2
Rédacteur/Modérateur
 
Jean-Marc Blanc
Inscription : avril 2007
Messages : 2 658
Détails du profil
Informations personnelles :
Nom : Jean-Marc Blanc
Âge : 71

Informations forums :
Inscription : avril 2007
Messages : 2 658
Points : 3 498
Points : 3 498
Salut!
Sur ce site, il y a des cours, en particulier un que j'ai écrit: "Résolution des systèmes linéaires", où tu trouveras la réponse à ta question.
Jean-Marc Blanc
__________________
Calcul numérique de processus industriels
Formation, conseil, développement

Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)
FR119492 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 00h08   #3
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci je vais regarder
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 14h08   #4
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Bonjour,

tu liras dans beaucoup de documents qu'il faut pivoter pour améliorer la précision de tes calculs mais en fait on sait théoriquement que ça ne sert pas à grand chose. Quand on résout un système linéaire Ax=b à l'aide de la méthode de Gauss, on sait que l'erreur sur la solution vérifie
Citation:
||x-y|| <= C(n)*k(A)*rho(A)*||x||,
où ||.|| est une norme vectorielle, y désigne la solution approchée calculée, C(n)>1 est une constante ne dépendant que de la taille n du problème, k(A)>=1 est le conditionnement de la matrice A pour la norme matricielle subordonnée à ||.||, et rho(A)>=1 un terme de croissance. Il s'avère que ce dernier terme n'est pas borné en général, c'est-à-dire que l'erreur ||x-y|| peut être arbitrairement grande. Concrètement, cela veut dire qu'en utilisant la méthode de Gauss tu peut calculer n'importe quoi si ton système linéaire possède des propriétés particulièrement défavorables. Les techniques de pivotage permettent de borner le terme de croissance. Par exemple, en permutant les lignes pour maximiser chaque pivot en valeur absolue, on obtient
Citation:
rho(A) <= 2^n.
Certes, on sait que l'erreur est bornée, mais par un terme qui est très élevé si la taille n de ton système est grande.

La vraie raison pour laquelle on pivote est que l'on s'assure de ne pas avoir de pivot nul lorsque la matrice est inversible, c'est-à-dire qu'on s'assure de ne jamais diviser par un terme nul. Dit autrement, la factorisation LU d'une matrice inversible existe toujours à une permutation par ligne ou par colonne près . Sans permutation, une matrice inversible n'admet pas nécessairement de factorisation LU.

Pour approfondir le sujet, tu peux lire le livre de Higham intitulé "Accuracy and stability of numerical algorithms".
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 14h29   #5
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
Citation:
Envoyé par Aleph69 Voir le message
Bonjour,

tu liras dans beaucoup de documents qu'il faut pivoter pour améliorer la précision de tes calculs mais en fait on sait théoriquement que ça ne sert pas à grand chose. Quand on résout un système linéaire Ax=b à l'aide de la méthode de Gauss, on sait que l'erreur sur la solution vérifie

où ||.|| est une norme vectorielle, y désigne la solution approchée calculée, C(n)>1 est une constante ne dépendant que de la taille n du problème, k(A)>=1 est le conditionnement de la matrice A pour la norme matricielle subordonnée à ||.||, et rho(A)>=1 un terme de croissance. Il s'avère que ce dernier terme n'est pas borné en général, c'est-à-dire que l'erreur ||x-y|| peut être arbitrairement grande. Concrètement, cela veut dire qu'en utilisant la méthode de Gauss tu peut calculer n'importe quoi si ton système linéaire possède des propriétés particulièrement défavorables. Les techniques de pivotage permettent de borner le terme de croissance. Par exemple, en permutant les lignes pour maximiser chaque pivot en valeur absolue, on obtient

Certes, on sait que l'erreur est bornée, mais par un terme qui est très élevé si la taille n de ton système est grande.

La vraie raison pour laquelle on pivote est que l'on s'assure de ne pas avoir de pivot nul lorsque la matrice est inversible, c'est-à-dire qu'on s'assure de ne jamais diviser par un terme nul. Dit autrement, la factorisation LU d'une matrice inversible existe toujours à une permutation par ligne ou par colonne près . Sans permutation, une matrice inversible n'admet pas nécessairement de factorisation LU.

Pour approfondir le sujet, tu peux lire le livre de Higham intitulé "Accuracy and stability of numerical algorithms".

merci alex pour cette reponse !

en gros ce que tu veux me dire c'est que si la matrice est mal conditionnée je peux prendre n'importe quel pivot la solution sera pourrie ?

si j'ai une matrice très bien conditionnée la solution de changer de pivot ameliore grandement les resultats où c'est negligeable ? (c'est solution porte de nom de pivot partiel, c'est bien ça ?)
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 14h49   #6
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Le pivotage est dit partiel si on ne permute que des lignes (pivotage partiel par ligne) ou que des colonnes (pivotage partiel par colonne). Il est dit total lorsqu'on permute à la fois des lignes et des colonnes.

Il faut bien comprendre que la norme de l'erreur est bornée par un terme de conditionnement ET un terme de croissance, c'est-à-dire que :
1. il s'agit bien d'une borne supérieure qui ne donne qu'une estimation du pire cas possible. Un problème mal conditionné ne conduit pas nécessairement à de grandes erreurs de calcul.
2. les influences du préconditionnement et du pivotage ne sont pas liées (on n'agit pas sur le même terme).

Ceci permet de répondre à tes questions.
Citation:
si la matrice est mal conditionnée je peux prendre n'importe quel pivot la solution sera pourrie ?
Non, pas forcément à cause de 1.

Citation:
si j'ai une matrice très bien conditionnée la solution de changer de pivot ameliore grandement les resultats où c'est negligeable ?
A cause de 2., il n'y a pas de rapport direct entre le pivotage et le conditionnement (sauf cas particulier).

EDIT : je vais te donner une réponse plus frappante pour que tu comprennes bien. Je résous des systèmes linéaires inversibles de conditionnement en 10^8 et de terme de croissance en 10^9 et j'obtiens quand même une solution à 10^{-9} près. Seulement, je ne peux vérifier cela qu'après calcul de la solution. Par conséquent, pour éviter les problèmes, on préfère préconditionner et faire du pivotage pour éviter d'avoir des problèmes d'imprécisions et/ou d'inexistence de la factorisation LU.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 15h28   #7
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci beaucoup pour ta reponse !!!

=> peux tu m'en dire un peu plus sur ce terme de croisance stp ?
c'est la capacité en amplifier les erreurs ou un truc dans ce genre ?

=> es ce terme de croissance est lié au rayon spectral de la matrice ? et si oui comment ? pourquoi ... ?

merci de ton aide
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h48   #8
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Citation:
=> peux tu m'en dire un peu plus sur ce terme de croisance stp ?
c'est la capacité en amplifier les erreurs ou un truc dans ce genre ?
C'est une mesure de la croissance des termes de ta matrice pendant l'élimination. Disons qu'on applique la méthode de Gauss à une matrice inversible A. On pose A^(0)=A. Je note A^(1) la matrice obtenue après élimination des termes sous-diagonaux de la 1e colonne (étape 1). Je note A^(2) la matrice obtenue après élimination des termes sous-diagonaux de la 2e colonne (étape 2). Plus généralement, je note A^(k) la matrice obtenue après élimination des termes sous-diagonaux de la ke colonne (étape k), pour 1<=k<n, n désignant la taille de A. En particulier, A^(n-1)=U est la matrice triangulaire supérieure obtenue à la fin de la méthode de Gauss. Pour 1<=i,j<=n, je note a_ij le coefficient de A situé en ligne i et colonne j, et je désigne par a_ij^(k) le coefficient de A^(k) situé en ligne i et colonne j. Alors, le terme de croissance est défini par
Citation:
rho(A) = max_ijk |a_ij^(k)| / max_ij |a_ij|.
Ce terme grandit quand l'élimination augmente la valeur des coefficients matriciels.

Citation:
=> es ce terme de croissance est lié au rayon spectral de la matrice ? et si oui comment ? pourquoi ... ?
Tout ce qui fait intervenir les coefficients d'une matrice peut être lié d'une manière ou d'une autre au rayon spectral via des minorations/majorations. En particulier, on peut majorer la norme d'une matrice par son rayon spectral et on peut utiliser aussi les encadrements de Gershgorin pour travailler plus localement. Bref, tu peux sûrement encadrer rho(A) par des termes dépendant du spectre de ta matrice et des matrices intermédiaires A^(k). Cependant, je ne pense pas qu'un tel encadrement soit très utile en pratique car beaucoup trop large.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 16h20   #9
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci pour ton aide.

Si j'ai bien compris une matrice avec un conditionnement parfais, si on l'a résous par Gauss peut donner un résultat pourri... ?

j'aurais pas pensé...
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 16h22   #10
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Tout à fait! C'est le cas de tous les algorithmes qui ne sont pas rétrogradement stables (backward stable).
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 16h40   #11
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
Citation:
Envoyé par Aleph69 Voir le message
Tout à fait! C'est le cas de tous les algorithmes qui ne sont pas rétrogradement stables (backward stable).
merci alex pour ta reponse!

du coup c'est nul comme algo lol
on est jamais certain que la solution est la bonne ....
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 16h59   #12
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Il s'avère qu'en pratique l'algorithme fournit généralement des solutions très précises mais on ne sait pas expliquer pourquoi :
http://www.cse.illinois.edu/courses/..._Mysteries.pdf
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 17h13   #13
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci pour le lien

et en pratique c'est beaucoup utilisé comme algo ? par exemple dans matlab c'est ceci qui est utilisé ou un autre ?

on prefere utiliser des methodes iteratives en pratiques ou direct ? et pourquoi .. ?
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 17h23   #14
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Citation:
et en pratique c'est beaucoup utilisé comme algo ?
C'est la méthode directe la plus utilisée pour résoudre les systèmes linéaires inversibles qui ne sont pas hermitiens définis positifs.
Citation:
par exemple dans matlab c'est ceci qui est utilisé ou un autre ?
Oui, c'est la commande backslash de matlab.
Citation:
on prefere utiliser des methodes iteratives en pratiques ou direct ? et pourquoi .. ?
Cela dépend des applications. Les méthodes directes donnent en général des solutions plus précises que les méthodes itératives mais nécessitent beaucoup plus de mémoire vive. Au niveau des temps de calcul, c'est très variable. Pour faire simple, la complexité d'une méthode directe est en O(n^3) alors qu'une méthode itérative (krylov) est en O(mn^2) où m désigne le nombre d'itérations.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/01/2012, 17h28   #15
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci beaucoup pour ces supers explication, une dernière:

=> tu dis que les méthodes directes utilisent + de memoires vivent, à quoi cela est lié ? il y a moijns d'operation que les methodes iteratives mais les operations sont plus grosses ?

c'est un truc dans ce genre ? pourrais tu m'expliquer stp ?

merci d'avance (c la dernière question )
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 18h44   #16
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
On suppose que tu dois résoudre un système linéaire inversible de taille n. Avec une méthode itérative, tu devras stocker quelques vecteurs intermédiaires de taille n. Avec une méthode directe, tu devras stocker la factorisation LU de ta matrice c'est-à-dire des matrices de taille nxn. Tu gagnes un peu parce que ces matrices sont triangulaires mais ça reste beaucoup plus important que le stockage de quelques vecteurs.
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/01/2012, 15h53   #17
Membre expérimenté
 
Inscription : février 2010
Messages : 1 473
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 1 473
Points : 529
Points : 529
merci beaucoup, je comprends ce que tu veux dire.
c'est tres gentil d'avoir pris le temsp de m'aider
21did21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h54   #18
Membre émérite
 
Homme
Chercheur
Inscription : mars 2010
Messages : 733
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chercheur

Informations forums :
Inscription : mars 2010
Messages : 733
Points : 931
Points : 931
Pas de problème!
Bonne continuation:
Aleph69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h39.


 
 
 
 
Partenaires

Hébergement Web