IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

Solution d'un système linéaire de faible rang (régularisé)


Sujet :

Mathématiques

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut Solution d'un système linéaire de faible rang (régularisé)
    Bonjour,

    Je cherche à résoudre efficacement le problème suivant:

    (a * I_n + QQ^T) x = y

    Où a est un scalaire positif, I_n est la matrice identité de taille n x n, et Q une matrice n x m telle que m << n. x et y sont des vecteurs de taille n.

    L'inverse de la matrice est a priori calculable par:

    (a * I_n + QQ^T)^(-1) = 1/a * ( I_n + Q (a * I_m + Q^TQ)^(-1)Q^T))

    Ce qui permet de beaucoup réduire les temps de calcul puisque la matrice à inverser est de taille m x m au lieu de n x n. Cependant, j'imagine que, comme pour la solution de Ax = y, le calcul de l'inverse n'est pas la méthode la plus adaptée pour des problèmes de précision numérique et de temps de calcul.

    Quelle est donc la meilleure façon de résoudre ce type de système ?

    D'avance merci,

    Alexis

  2. #2
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 426
    Points : 827
    Points
    827
    Par défaut
    Salut,
    Citation Envoyé par Alexis.M Voir le message
    le calcul de l'inverse n'est pas la méthode la plus adaptée pour des problèmes de précision numérique et de temps de calcul.
    Habituellement, une décomposition LU ou une décomposition de Cholesky est utilisée pour résoudre les systêmes linéaires.

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Citation Envoyé par bertry Voir le message
    Habituellement, une décomposition LU ou une décomposition de Cholesky est utilisée pour résoudre les systêmes linéaires.
    Oui mais mon cas a une structure très particulière. Il n'y a pas d'intérêt à calculer naïvement la décomposition de Cholesky de (a*I_n + QQ^T), à moins de disposer d'une méthode spécialisée pour la structure du problème, faute de quoi on se retrouve avec la complexité O(n^3) habituelle. Alors que la formule de l'inverse montre qu'il doit être possible de calculer le tout en O(m^3 + n^2m). Avec m << n, le gain en temps de calcul est considérable.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Si je comprend bien, tu as un système sur-dimensionné, c'est ça ?

    N équations à m inconnues ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    A x = b

    où A a plus de colonnes que de lignes (donc x plus grand que b)

    supposons que A est de rang plein (pas de lignes dépendantes)
    x = x1 + x2
    où x1 = A^T y est une combinaison linéaire des lignes de A,
    et A x2 = 0 (donc x2 appartient à ker(A))

    tu résous pour y (A A^T est inversible) :
    A A^T y = b

    puis si tu veux tu cherches une base de ker(A) pour trouver l'ensemble des x2 possibles

    si A n'est pas de rang plein c'est pareil mais A A^T n'est pas inversible donc il peut ne pas y avoir de solution pour y

    pour trouver ker(A) je pense à Gram-Schmidt

    concernant la régularisation, c'est A A^T y = b qu'il faut régulariser

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ben moi je pensais au Simplex, si effectivement il ya plus d"équations que d'inconnues
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    ben moi je pensais au Simplex, si effectivement il ya plus d"équations que d'inconnues
    quel rapport avec le simplexe ? il n'y a pas de contrainte (linéaire) ici

    le simplexe c'est dans le cas où il y a des contraintes linéaires ce qui assure que la solution du truc linéaire à minimiser est sur un des sommets du polytope acceptable (on oublie les cas dégénérés mais bon l'idée c'est ça)

  8. #8
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    A x = b

    si maintenant x est plus petit que b,
    c'est la même idée

    tu décomposes b = b1+b2 où A^T b2 = 0
    si b2 n'est pas égal à 0 alors il n'y a pas de solution

    sinon

    A^T A x = A^t b

    que tu résous pour x (et où tu peux régulariser A^T A)

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par acx01b Voir le message
    quel rapport avec le simplexe ? il n'y a pas de contrainte (linéaire) ici
    Je posais la question - je ne comprend pas exactement la formulation. Un Simplex et applicable sur un systèle linéaire, dans le cas où on a plus d'équations (n) que d'inconnues (m) (ce qui revient à avoir des contraintes en nombre n-m)..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  10. #10
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    hors sujet sur le simplexe

    regarde wiki/Algorithme_du_simplexe

    la forme la plus couramment utilisée pour présenter et étudier les algorithmes, qui est celle supposée par l'algorithme du simplexe révisé, est la forme standard :

    min c^T x
    Ax = b
    et x >= 0

    où c,b sont des vecteurs connus, A une matrice connue, et x un vecteur qu'on cherche

    la principale difficulté est de montrer que x* (le x optimal) est forcément sur un sommet du polytope admissible

    à mon avis le plus simple c'est d'abord de montrer que soit x = infini sur une des composante soit le peut être vu comme borné (en rajoutant des contraintes u^T x <= v qui ne changent rien à la solution), puis de dire que si x* est dans l'intérieur du polytope, alors x* est sur le segment [ab] où a est un sommet et b un point d'une face, a et b sont admissibles et c^Tx est une fonction linéaire donc
    c^Ta < c^Tb ou c^Tb < c^Ta ou c^Ta = c^Tb
    dans les deux premiers cas x* n'est pas la solution et dans le troisième a et b sont également solution

    si x* est sur une face c'est le même principe


    s'en suit l'algorithme du simple où l'on se balade de sommets en sommets adjacents

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Si je comprend bien, tu as un système sur-dimensionné, c'est ça ?

    N équations à m inconnues ?
    Non pas du tout, il s'agit d'un système linéaire avec autant d'équations que d'inconnues.

    La matrice A = (a * I_n + QQ^T) est de taille n x n, symétrique et de rang plein, mais la composante Q de taille n x m, est elle de faible rang.

    Ceci a pour conséquence que, lorsque je calcule A^(-1), je peux utiliser le théorème de l'inverse comme dans mon premier message pour réduire les calculs. Il est donc presque certain qu'il doit y a voir moyen de résoudre Ax = b de manière plus efficace et plus précise qu'en passant par le calcul de l'inverse.

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je pense avoir trouvé une solution raisonnable. Puisque

    x = (a * I_n + QQ^T)^(-1) y
    x = 1/a * (I_n + Q(a * I_m + Q^TQ)^(-1)Q^T) y # Formule de Woodbury
    x = 1/a * (y + Q(a * I_m + Q^TQ)^(-1)Q^T y )

    Je peux résoudre:
    (a*I_m + Q^TQ) z = Q^Ty
    puis:
    x = 1/a * (y + Qz)

    Cela permet notamment d'utiliser la décomposition de Cholesky pour calculer z. Il faut:
    • (m * N) opérations pour calculer Q^Ty
    • (m^2 * N) opérations pour Q^TQ
    • O(m^3) pour calculer z
    • (N + N * m) pour calculer (y + Qz)

    Soit une complexité asymptotique à la louche en O(m^3 + m^2 * N) à comparer aux O(N^3) de la solution naïve.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Solution pour un système non linéaire à 3 inconnues
    Par geant02 dans le forum MATLAB
    Réponses: 5
    Dernier message: 10/03/2008, 16h36
  2. Résolution système linéaire mais avec paramètre
    Par feynman dans le forum Scilab
    Réponses: 7
    Dernier message: 03/10/2007, 06h55
  3. Réponses: 4
    Dernier message: 10/03/2007, 17h45
  4. Vérification de système linéaire, avec tableaux
    Par lenny_ dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 13/06/2006, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo