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

Tcl/Tk Discussion :

generalized inverse of a matrix


Sujet :

Tcl/Tk

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 12
    Points
    12
    Par défaut generalized inverse of a matrix
    Bonjour,

    Il existe une librairie Tcl (Tcllib) de fonctions d'algèbre linéaire, et c'est très bien. Il y a aussi celle de Hume.

    Mes connaissances en mathématiques ne sont pas assez développées pour pouvoir, à partir de cette librairie, calculer l' INVERSE GÉNÉRALISÉE d'une matrice. Il s'agit d'une inverse qui n'a pas toutes les propriétés d'une matrice inverse, mais qu'il est possible de calculer même pour des matrices dites singulières (non inversibles). Il paraît qu'il y en a plusieurs, celle de Moore Penrose serait ma candidate parce, me semble-t-il, la moins restrictive.

    Je ne trouve pas d'algorithme me permettant de la calculer. Peut-être le script existe-t-il déjà, je ne l'ai pas trouvé

    Quelqu'un serait-il en mesure de m'aider? Ou de m'orienter assez bien pour que je puisse la programmer?

    Merci d'avance,

  2. #2
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 12
    Points
    12
    Par défaut Solution
    Bonjour à tous,

    J'apporte moi-même la solution à mon problème...

    la procédure est ci-dessous

    inspirée du site anglosaxon
    http://http://en.wikipedia.org/wiki/..._pseudoinverse
    - son argument, "X", est une matrice au format de LA (Hume)
    - elle requiert la librairie de Hume, LA et la librairie tcclib/math/linalg.tcl
    parce que LA est moins performant que tcllib pour la "singular value decomposition", mais je ne suis pas habitué à tcllib.

    code inélégant mai efficace

    vérification: multiplier l'inverse de la matrice A (celle qui est retournée par la procédure) par la matrice A: le résultat doit etre une matrice unité. Tout comme 1/4 * 4 = 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    proc moorepenrose {X} {
        #
        # Maximum de 7 DECIMALES, pas plus!!
        set Z $X
        set Z "[lrange $Z 0 2] [show $Z %8.7f]";# pas > 7 decimales
        set Ztcllib [::math::linearalgebra::from_LA $Z]
        set svd_tcllib [::math::linearalgebra::determineSVD $Ztcllib]
        set U [::math::linearalgebra::to_LA [lindex $svd_tcllib 0]]
        set S [::math::linearalgebra::to_LA [lindex $svd_tcllib 1]]
        set V [::math::linearalgebra::to_LA [lindex $svd_tcllib 2]]
        # 
        set el 0
        set Splus [vtrim $S]
        foreach item $Splus {
            #
    	if {$item > 0.00000000149} {  
    	    set Splus [lreplace $Splus $el $el [expr {1.0/$item}]]
    	} else {
    	    set Splus [lreplace $Splus $el $el 0.000]
    	}
    	incr el
        }
        set Splus "2 [mrows $S] [mcols $S] $Splus"
        set Splus_diag [mdiag $Splus]
        set regardez [mmult $Splus_diag [transpose $U]]
        set pinvZ [mmult $V $regardez]
        #
        set verification [mmult $pinvZ $Z]
        debug "verification! \n[show $verification %8.4f]"
        #
        return $pinvZ
    }
    #
    # Procedure moorepenrose - fin

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

Discussions similaires

  1. Méthode calcul inverse matrix 4x4
    Par Kromagg dans le forum Ogre
    Réponses: 9
    Dernier message: 22/06/2009, 12h02
  2. [VB6] [Graphisme] Inversion dans picturebox
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 16/04/2003, 15h05
  3. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  4. feuille de style generale
    Par Manu_Just dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/03/2003, 10h06
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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