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

R Discussion :

Multiplier des matrices avec un inconnu x


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut Multiplier des matrices avec un inconnu x
    Bonjour les ami(e)s,

    J'espère que vous allez bien.

    J'ai un problème avec une programma et votre aide sera grandement apprécié.

    1) Premier point :

    J'ai deux matrices dont j'aimerais faire le produit mais dans l'une d'elle il y a un inconnu x.

    Exemple :

    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
     
     
    # Matrice A avec un inconu x
    A <- cbind(rep(1, 1), 1, 1, "x", 0.83, 0.26, 0.19, 0.03, 0.39, 1) ; A
     
     
    # Matrice B
    B <- c(0,39, -0.02, 0.22, 0.96, 0.02, 0.06, 0.02, 0.01, 0.32, -0.96) ; B
     
    matrix(B) # transpose the vector
     
    B <- as.matrix(B) ; B
     
    # Produit de A*B
     
    AB <- A %*% B ; AB  
     
    # J'ai cette erreur : Error in A %*% B : 
    # nécessite des arguments numériques/complexes matrice/vecteur
     
    # ce qui est normal
     
    # J'essai donc ceci mais sans rien obtenir de concret
     
    AB <- function(x) A(x) %*% B ; AB
     
    # Je l'ai fait manuellement à la main et je dois obtenir AB = 0.96 * x - 0.18, une fonction de x

    1) Deuxième point :

    Je dois ensuite faire ce calcul :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
    Sigma = 4
    # Voici ce que j'essai de calculer au final : 
     
    x <- AB * pnorm(AB/sigma) + sigma * dnorm(AB/sigma)
     
    #  pnorm(.) et dnorm(.) sont respectivement les fonctions de distribution cumulative et de densité de la loi normale

    Donc au final je devrais avoir une équation non linéaire de la forme x = f(x) que je vais ensuite résoudre.

    Pouvez vous m'aider ?

    Je ne suis pas un expert en R et je n'arrive pas a faire le produit de matrice avec inconnu a plus forte raison calculer les fonctions de distribution cumulative et de densité de la loi normale avec l'inconnu.



    GRAND merci d'avance.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    bonjour ,
    juste une remarque,
    dans mes (très lointains) souvenirs il me semblait que pour multiplier 2 matrices il fallait que le nombre de colonnes de la première matrice soit égal au nombre de colonne de la deuxième matrice , ce qui n'est pas le cas dans l'exemple donnée

  3. #3
    Membre confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut Pas tout a fait
    Bonjour Pierre,

    Merci pour ta réponse.
    Mais c'est plutôt le nombre de colonne de la première matrice qui doit être égale au nombre de ligne de la deuxième matrice.

    Merci !

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 491
    Par défaut
    re bonjour , oui je me suis emmêlé , mais dans l'exemple que tu as donné on ne peut pas multiplier les 2 matrices
    pour répondre à ta question un code de ce style, mais j'ai modifié les données de A ,rep(1, 2) à la place de rep(2,1) pour avoir 11 colonnes ( = 11 lignes de B), de plus rep(2,1) <==> 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # Matrice B
    B <- c(0,39, -0.02, 0.22, 0.96, 0.02, 0.06, 0.02, 0.01, 0.32, -0.96) ; B
     
    matrix(B) # transpose the vector
     
    B <- as.matrix(B) ; B
     
    # Produit de A*B
    AB <- function(x) {
     A <-function(x){matrix(c(rep(1, 2), 1, 1, x, 0.83, 0.26, 0.19, 0.03, 0.39, 1),nrow=1)
       }
      A(x) %*% B
    }
    AB(0)

  5. #5
    Membre confirmé
    Homme Profil pro
    Économiste
    Inscrit en
    Janvier 2016
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Économiste

    Informations forums :
    Inscription : Janvier 2016
    Messages : 114
    Par défaut GRAND MERCI
    Bonjour Pierre,

    Grand merci pour ton code.

    Je l'ai adapté et rajouté la deuxième parti de mon code avec les fonctions de distribution cumulative et de densité de la loi normale.

    Avec une petite recherche j'ai trouvé la fonction uniroot qui me permet de ressoudre l'équation.

    Voici le code :

    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
     
     
    sigma = 4
     
     
    AB <- function(x) {
     
      A <- matrix(c(rep(1, 3), x, 0.83, 0.26, 0.19, 0.03, 0.39, 1),nrow=1)
      B <- matrix(c(0.39, -0.02, 0.22, 0.96, 0.02, 0.06, 0.02, 0.01, 0.32, -0.96),nrow = 10)
     
      c(A%*%B*pnorm(A%*%B/sigma) + sigma*dnorm(A%*%B/sigma)) - x
     
    }
     
    uniroot(AB, lower = 0, upper = 10)

    Merci encore pour ton aide c'est super gentil.

Discussions similaires

  1. [Débutant] Aide multiplier des matrices pour créer un tableau
    Par Absynthe12 dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/09/2019, 16h09
  2. SourceForge multiplie des dérives avec la diffusion d’adwares
    Par Hinault Romaric dans le forum Actualités
    Réponses: 24
    Dernier message: 04/06/2015, 12h40
  3. [Python 3.X] [Matplotlib] Afficher des matrices avec des images correspondant à un nombre.
    Par andranik92 dans le forum Programmation multimédia/Jeux
    Réponses: 0
    Dernier message: 01/06/2015, 20h48
  4. [Minitab] Comment multiplier des matrices ?
    Par rg0962 dans le forum Autres outils décisionnels
    Réponses: 1
    Dernier message: 08/01/2008, 11h58
  5. Créer un type matrice avec des templates
    Par souading3000 dans le forum C++
    Réponses: 2
    Dernier message: 15/06/2006, 11h24

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