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 :

Remplir une matrice symétrique


Sujet :

Mathématiques

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Remplir une matrice symétrique
    Bonjour,
    mon problème est le suivant:
    j'ai un système avec n entrées et n sorties.
    Mon système assure la réciprocité donc la matrice des fonctions de transferts (complexes) est SYMETRIQUE et les termes diagonaux sont soient tous positifs, soit tous négatifs.
    Le PB est le suivant: experimentalement, je n'ai pas accès aux valeurs de toutes les entrées, par conséquent, certaines colonnes ne sont pas définies mais EN PARTIE COMBLEES par le principe de symétrie par rapport à la diagonale.
    La question est: partant du fait qu'il y a redondance d'information dans une matrice symétrique complète, puis approcher, avec une matrice incomplète, une estimation de la matrice complète (ou pleine) dans le cas où quelques données d'entrées manquent à l'appel? (données manquante très inférieures au nombre d'entrées).
    Je pensait à extraire les valeurs propres ou singulières de la matrice incomplète et "simuler" une tendance vers la matrice complète equivalente (si toutes les données d'entrées avaient pu être collectées).

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    si ta matrice est symétrique et que tu as en général beaucoup plus d'entrée que de valeurs manquante, pourquoi ne pas faire simplement :
    - parcours de la matrice
    - si l'élément (x,y) est présent alors remplir (y,x).

  3. #3
    Membre habitué Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Points : 132
    Points
    132
    Par défaut
    Bonjour

    Si ta matrice est grande, il faut d'abord louer de l'espace mémoire.
    Apres faire le remplissage
    Cordialement

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    si ta matrice est symétrique et que tu as en général beaucoup plus d'entrée que de valeurs manquante, pourquoi ne pas faire simplement :
    - parcours de la matrice
    - si l'élément (x,y) est présent alors remplir (y,x).
    Oui, celà coule de source. Mais le PB est de retrouver AUSSI le terme diagonal de la colonne manquante. Et ce terme, situé sur la diagonale n'est pas duplicable. La forme du terme diagonal étant (AiAi alors que partout ailleurs, on a AiAj et, par symétrie, AjAi).

    Citation Envoyé par abidineb Voir le message
    Bonjour

    Si ta matrice est grande, il faut d'abord louer de l'espace mémoire.
    Apres faire le remplissage
    Cordialement
    Bonjour,
    merci de ta réponse, mais pour l'instant, j'en suis à rechercher la meilleure methode du point de vue analytique. Après, il est clair qu'il va falloir allouer de la mémoire, car en l'occurence: la matrice (avec des "trous") fait 49x49 et est répétée sur 1024 niveaux (systèmes empilés)...soit une matrice 3D. Mais pour l'instant, je limite le raisonnement en 2D.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par negyxo27 Voir le message
    il est clair qu'il va falloir allouer de la mémoire, car en l'occurence: la matrice (avec des "trous") fait 49x49 et est répétée sur 1024 niveaux (systèmes empilés)...soit une matrice 3D.
    La taille de ce tableau n'a rien d'exceptionnel

    En classe Double (codée sur 8 octets), la quantité de mémoire nécessaire pour le stockage sera approximativement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    49*49*1024*8/1024/1024 = 19 Mo (environ)

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    Citation Envoyé par negyxo27 Voir le message
    Oui, celà coule de source. Mais le PB est de retrouver AUSSI le terme diagonal de la colonne manquante. Et ce terme, situé sur la diagonale n'est pas duplicable. La forme du terme diagonal étant (AiAi alors que partout ailleurs, on a AiAj et, par symétrie, AjAi).
    donc le seul problème qui reste est de savoir comment on va trouver les éléments diagonaux après avoir rempli le reste.
    Questions :
    - que représentent ces éléments ? Qui sont ils ?
    - est ce qu'il existe un moyen de les approximer si on connaît le reste de la matrice ?
    - est ce que l'expérience dont tu tires cette matrice permet de répondre au moins en parti à cela ?

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    Bonjour,



    donc le seul problème qui reste est de savoir comment on va trouver les éléments diagonaux après avoir rempli le reste.
    Questions :
    - que représentent ces éléments ? Qui sont ils ?
    - est ce qu'il existe un moyen de les approximer si on connaît le reste de la matrice ?
    - est ce que l'expérience dont tu tires cette matrice permet de répondre au moins en parti à cela ?
    Alors: partant du principe que les coefficients diagonaux sont au carré (AiAi) et que le reste des termes extra-diagonaux sont de la forme AiAj (et symétriquement AjAi), j'ai trouvé l'astuce suivante:

    -Remplir tant que possible la matrice grace à la symétrie

    -effectuer une decomposition en valeurs singulières:
    svd[A]=[U]x[S]x[V]'
    [S] étant la matrice des valeurs propres (diagonale pure, zéros partout ailleurs)

    et le ' pour "transposé" (U et V étant les matrices des vecteurs propres).
    -Je ne garde que le premier terme de [S] et je recalcule inversement [Ar].
    J'obtiens alors un remplissage des termes diagonaux assez cohérent mais une dégradation des termes extra-diagonaux. je reprend la matrice A du début et je remplace ainsi les termes diagonaux absent par ceux de Ar.

    -Je valide cette nouvelle matrice créée en refaisant une décomposition en valeurs singulières et je vérifie que la matrice est homogène et symétrique en ayant peu de termes diagonaux non-nul (bien conditionnée, il ne doit subsister que la 1ere valeur singulière et une faible valeur pour la deuxième).

    Mais j'ai quand même l'impression d'avoir pas mal "bricolé" et celà ne me satisfait pas beaucoup du point de vue "déontologique"...

  8. #8
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Points : 46
    Points
    46
    Par défaut
    Si j'essaye de résumer, tu as une matrice dont tous les termes s'écrivent sous la forme AiAj (donc ta matrice M = AA' avec A vecteur).
    Et tu sais trouver tous les termes extra diagonaux.

    Est-ce exact ?

    Si tel est le cas je pense que ton process avec la svd est bien compliqué pour pas grand chose.
    Pour trouver les termes diagonaux, il suffit d'utiliser les termes extra diagonaux.

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par vincent69 Voir le message
    Si j'essaye de résumer, tu as une matrice dont tous les termes s'écrivent sous la forme AiAj (donc ta matrice M = AA' avec A vecteur).
    Et tu sais trouver tous les termes extra diagonaux.

    Est-ce exact ?

    Si tel est le cas je pense que ton process avec la svd est bien compliqué pour pas grand chose.
    Pour trouver les termes diagonaux, il suffit d'utiliser les termes extra diagonaux.
    Merci de ta réponse!

    Oui, mais je ne trouve pas l'astuce pour decomposer M en AA' avec des trous sur la diag de M autrement qu'en bricolant termes à termes.

    Si tu penses à une decomposition du type Cholesky, celà ne marche que pour des matrices réelles* et le résultat (A) est ne matrice diag inférieure. non?
    Ou une decomposition de Jordan peut-être...
    (*oui, car ma M est complexe)

    Bon, si je fais une decomposition en valeurs et vecteurs propres. Si la M de départ est incomplète, en faisant AA' (vecteurs propres), je retrouve mes "trous de départ". A quel moment puis-je reconstituer une matrice M approximée "sans trous" avec une démarche moins "termes à termes"? (en quelques steps quoi...)

  10. #10
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2009
    Messages : 37
    Points : 46
    Points
    46
    Par défaut
    Pour moi faut simplement les calculer les uns par rapport aux autres en résolvant un petit système.
    Quelques pistes : si tu connais un terme diagonal Ai, tu vas pouvoir en déduire tous les termes Aj tel que AiAj connu.
    Connaissant Aj, tu vas pouvoir en déduire tous les termes Ak tel que AjAk connu.... et ainsi de suite.
    Si tu n'as aucun terme diagonal, tu peux facilement en calculer un en résolvant un petit système (par exemple pour calculer Ai, tu peux utiliser AiAi, AiAk, AjAk, AjAi si AiAk, AjAk et AjAi connu).
    Tu dois pouvoir généraliser cela avec un petit système à résoudre.

  11. #11
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par vincent69 Voir le message
    Pour moi faut simplement les calculer les uns par rapport aux autres en résolvant un petit système.
    Quelques pistes : si tu connais un terme diagonal Ai, tu vas pouvoir en déduire tous les termes Aj tel que AiAj connu.
    Connaissant Aj, tu vas pouvoir en déduire tous les termes Ak tel que AjAk connu.... et ainsi de suite.
    Si tu n'as aucun terme diagonal, tu peux facilement en calculer un en résolvant un petit système (par exemple pour calculer Ai, tu peux utiliser AiAi, AiAk, AjAk, AjAi si AiAk, AjAk et AjAi connu).
    Tu dois pouvoir généraliser cela avec un petit système à résoudre.
    Merci de ta réponse, je voulais éviter la "bricole termes à termes". mais bon, je vais automatiser la recherche des "trous" dans chaque matrice et résoudre le mini-système par les termes adjacents. C'est pour celà aussi que je trouvais l'idée de la decomposition SVD séduisante, car au prix d'une légère erreur sur l'ensemble de la matrice, je pouvais travailler "en aveugle" (en ignorant les trous) et générer, au final, que des matrices bien conditionnées et symétriques.
    Merci encore de ta réponse.
    je laisse la discussion ouverte (je ne mets pas de suite "résolu") au cas où qq'un avait une idée de plus...

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2007, 15h40
  2. Créer une matrice symétrique à partir de 3 colonnes
    Par vincent550 dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/04/2007, 13h35
  3. Remplir une matrice et afficher son contenu
    Par annoussa dans le forum Pascal
    Réponses: 2
    Dernier message: 08/11/2006, 11h48
  4. Remplir une matrice de variance/covariance
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 31/07/2006, 17h55

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