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

MATLAB Discussion :

Opérateur '/' et inversion de matrices non carrées


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Opérateur '/' et inversion de matrices non carrées
    Bonjour à tous !

    MatLab m'a sorti aujourd'hui un truc assez étrange devant lequel je suis resté fort perplexe. Je fais appel à vous en espérant que quelqu'un sache m'expliquer ce qu'il se passe dans les entrailles des algorithmes de calcul de MatLab...

    Je ne vais pas expliquer ici tout mon code, juste que ce qui est important pour la suite:

    J'ai une matrice R de taille [2400,1], un vecteur colonne donc, qui contient un signal. Ce signal n'est pas très intéressant en soi, il a des valeurs un peu aléatoire majoritairement comprises entre 0 et 2, avec quelques pics aïgus entre 5 et 12 (12 étant mon pic principal). Je simplifie bêtement mais vous comprendrez plus bas pourquoi je vous dis ça...

    J'ai voulu récupérer un nouveau vecteur contenant les mêmes valeurs que R, mais inversées. J'aurais donc dû écrire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    R2 = 1./R ; % ce que j'aurais dû taper
    R2 = 1/R ; % ce que j'ai tapé
    Mais, petit étourdi que je suis, j'ai oublié le point devant le slash ! J'ai donc inversé la matrice plutôt que ses valeurs.
    Plus loin dans mon code, j'ai ensuite tranquillement lancé mon petit plot(t,R2). Je me suis rendu compte de mon ânerie très rapidement, mais je suis resté perplexe / ébahi devant le résultat.

    Il m'a renvoyé un signal nul sur toute la base de temps, sauf en 1 point où il valait 0,083, c'est à dire à peu près 1/12... Vous l'aurez deviné, ce point non nul correspond à l'échantillon du pic principal de mon signal de base, qui valait à peu près 12...

    Donc OK, MatLab m'a bien crée une matrice telle que le produit de R et R2 est égal à 1... Mais comment m'a-t-il sorti cette matrice ? En effet je lui ai demandé un truc impossible, inverser une matrice absolument pas carrée, et il me sort 1 seule valeur. Mais pas sur n'importe quel échantillon, sur celui qui correspondait au max de mon signal de base.

    J'espère que j'ai réussi à me faire comprendre...

    Maintenant pourquoi je pose cette question ? Parce que le résultat qu'il m'a filé est juste génial pour mon application (que je ne développerais pas ici, j'en aurais pour une plombe...) ! Donc j'ai envie de l'utiliser, mais j'aimerais bien savoir ce qu'il s'est exactement passé pour arriver à ça, sinon je ne suis pas franchement crédible .

    J'ai essayé de chercher moi même la réponse comme un grand, mais impossible de savoir exactement ce que fais MatLab quand on lui demande de calculer l'inverse d'une matrice non carrée...

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Citation Envoyé par La documentation de mrdivide /
    x = B/A
    x = mrdivide(B,A)
    ...
    If A is a rectangular m-by-n matrix with m ~= n, and B is a row vector with n elements or a matrix with n columns, then x = B/A returns a least-squares solution of the system of equations x*A = B.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 230
    Points : 352
    Points
    352
    Par défaut
    Salut,

    Après un court regard vers la doc, tu as ceci qui pourrait répondre à ta question :
    x = B/A solves the system of linear equations x*A = B for x. The matrices A and B must contain the same number of columns.
    If A is a scalar, B/A performs element-wise division of B by A.
    En fait, matlab considère que tu résous un système d'équation linéaire. Comme ton système est du type x*A =1, tu obtiens les éléments inverses.

    Edit : grillé.
    Je ne réponds pas aux questions techniques via MP. Le but du forum est de permettre de trouver des solutions ensembles pour aider un ensemble de personnes.

    Loi du Chaos Informatique
    L’informatique, ça tient du chaos : une fois ça marche, une fois ça foire, tu sais pas pourquoi, c’est juste que tu viens de changer de lobe sur l’attracteur étrange.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'avais bien vu quelque chose d'équivalent en tapant help mrdivide, mais cela ne m'a pas vraiment aidé à comprendre mon résultat...

    MatLab va essayer de résoudre un système d'équations, le mien va être x*R=1. Jusque là je suis.
    Le résultat est un vecteur ligne de même taille, mais pourquoi ce vecteur est-il vide sauf en 1 point ?...

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    En clair, mrdivide va résoudre l'équation :
    x1*R1+x2*R2+...+xN*RN = 1
    c'est une équation à N inconnues qui possèdent une infinité de solutions. mrdivide en donne une assez triviale : on annule toutes les composantes sauf une. Je ne connais pas ton application, mais je doute que ce résultat soit très pertinent.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    heu ... c'est mldivide (\) qui donne une solution à ce type d'équation
    mrdivide(/) est une division matricielle et rdivide(./) une division scalaire d'une matrice

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Je t'invite à regarder à nouveau la documentation, \ pour les équations de type AX=B (sous certaines conditions de dimensions de A et B), et / pour les équations de type XA=B (sous certaines conditions de dimensions de A et B).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  8. #8
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    autant pour moi, j'ai appris quelque chose
    cependant sur la doc de la R2011b c'est n'est pas explicite sur la page de mrdivide / ... ça l'est pas contre sur la page mldivide \, mrdivide /

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/04/2015, 10h10
  2. [E-07] inverse matrice - matrice non inversible - gestion d'erreur
    Par Lnmex dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2008, 23h51
  3. [Affectation] Méthode des Hongrois avec une matrice non carrée
    Par bmw13fr dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 12/09/2007, 14h38
  4. Passage en parametre d'une matrice NON carrés
    Par Steffane dans le forum C
    Réponses: 11
    Dernier message: 02/08/2006, 14h10
  5. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38

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