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 :

Somme d'un produit de matrices [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Somme d'un produit de matrices
    Bonjour,

    je souhaite calculer les différents termes de la matrice suivante sous Matlab :

    S=zeros(N,1)
    pour tout i entre 1 et N

    Formule mathématique

    avec K une matrice déjà définie.
    Je ne vois pas comment faire car le terme a^k et le terme K(i-k) ne dépendent pas de la même variable, donc je ne peux pas définir une matrice qui donnerait le produit des deux termes et ensuite sommer les termes de cette matrice.

    Merci d'avance pour votre aide !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2015
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Tout d'abord, S tel que tu l'a défini est un vecteur et non une matrice (N lignes, 1 colonne)
    Ensuite je ne comprends pas trop ton problème, vu que tu dois calculer chaque S(i) à i fixé. Soit S(1); S(2) ... donc de ce fait, tu n'auras qu'une variable k qui changera à chaque pas de temps.
    Si tu veux tout calculer d'un coup je pense qu'en utilisant deux boucles for imbriquées, ce devrait être facile
    Ex :
    for i=2:1:N
    for k=1:1:i-1
    [Instructions]
    end
    end

    Attention, ton i ne peux valoir 1, car la somme de k=1 à 0 (i-1=0 quand i vaut 1) n'a pas de sens. Soit tu as une valeur pour S(1) déjà défini, soit tu n'en as pas, mais tu ne peux pas la déduire par cette somme.

    Tente un code, je tenterais de t'aider si tu bloques

    A bientôt,

    TiPi

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ta réponse !

    En effet, S est un vecteur colonne, mais pour moi un vecteur colonne reste une matrice, c'est juste un cas particulier.

    Oui, il faut que je commence la somme en i=2, merci !

    Voilà une proposition de code (mais je pense qu'il y a plus efficace...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    X=zeros(N,N-1);
     
    for i=2:N
      for k=1:i-1
    X(i,k)= a^k*K(i-k)
      end
    end
     
    S=sum(X,2);
    Est-ce qu'il y aurait mieux ? Merci !

  4. #4
    Membre régulier Avatar de Alex3434
    Homme Profil pro
    Docteur / Ingénieur R&D
    Inscrit en
    Juillet 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Docteur / Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 66
    Points : 76
    Points
    76
    Par défaut
    Je te propose de supprimer la fonction sum et réaliser directement au sein de tes boucles for la somme toi même comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X=zeros(N,N-1);
    Somme = 0;
     
    for i=2:N
      for k=1:i-1
     
          Somme = Somme + a^k*K(i-k);
     
      end
    end

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Cela doit être possible avec une unique boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    k = 1 : N; k=k';
    for i = 1:N
         S(i) = sum(a^k(1:i-1).*flipdim(K(i-(i-1):i-1,1);
    end
    A vérifier mais ça doit pas être trop loin de la vérité.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ce code :
    Citation Envoyé par Alex3434 Voir le message
    Je te propose de supprimer la fonction sum et réaliser directement au sein de tes boucles for la somme toi même comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X=zeros(N,N-1);
    Somme = 0;
     
    for i=2:N
      for k=1:i-1
     
          Somme = Somme + a^k*K(i-k);
     
      end
    end
    mais je ne suis pas familière de ce genre de notations, où il n'y a pas d'indice associé à Somme : est-ce que cela veut dire que pour tout i et tout k définis, on prend le terme précédent (en termes de k) et on lui ajoute le nouveau terme ?

  7. #7
    Membre régulier Avatar de Alex3434
    Homme Profil pro
    Docteur / Ingénieur R&D
    Inscrit en
    Juillet 2014
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Docteur / Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 66
    Points : 76
    Points
    76
    Par défaut
    Au temps pour moi, j'avais oublié l'indice i de ton S(i), le code devient celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    X=zeros(N,N-1);
     
    for i=2:N
      for k=1:i-1
     
          Somme(i) =  a^k*K(i-k);
     
      end
    end
    Citation Envoyé par pa243 Voir le message

    mais je ne suis pas familière de ce genre de notations, où il n'y a pas d'indice associé à Somme : est-ce que cela veut dire que pour tout i et tout k définis, on prend le terme précédent (en termes de k) et on lui ajoute le nouveau terme ?
    En gros cette notation ne faisait que sommer les différentes valeurs de S(i) pour obtenir un seul S, ce qui ne correspondait pas à ce que tu voulais faire.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Désolée, mais je ne comprends pas où est la somme là-dedans ?

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Nulle part, si tu veux utiliser une double boucle, il faudra le faire comme dans le premier exemple de Alex3434, puis sommer chaque colonne ensemble.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    La commande avec une seule boucle marche très bien, merci ! J'ai juste fait des modifications mineures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    k = 1 : N-1; k=k';
    for i = 2:N
         S(i) = sum(a.^k(1:i-1).*flipdim(K(i-(i-1):i-1),1));
    end
    A quoi cela sert-il de définir k comme un vecteur colonne ?

    Merci encore pour votre aide !

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    La question est-elle, à quoi cela sert-il de définir k comme vecteur colonne (i.e. pourquoi le k=k') ou à quoi sert-il de définir k comme vecteur?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Pourquoi k=k' ?

  13. #13
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    J'ai supposé que ta matrice K était un vecteur colonne. Pour pouvoir effectuer X.*K, il faut que X soit de même dimension que K.
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    K est bien un vecteur colonne.

    Si je comprends bien : le fait que k soit un vecteur colonne fait que a.^k est un vecteur colonne ?

    Merci !

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    oui,

    c'est la même chose que de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1:N-1
         k(i) = a^i;
    end
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  16. #16
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Ok, merci beaucoup !!

  17. #17
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Re-bonjour,

    je me permets de reposter dans ce fil de discussion car j'ai une question très proche de la précédente :

    je voudrais calculer :

    Formule mathématique pour chaque t, n et i,

    avec a une constante et M une matrice de trois dimensions (T,N,N) et M(t,n,1)=1.

    En appliquant les indications que vous m'avez données, est-ce que je peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    k=1:N-2; k=k';
     
    for t=1:T
      for n=1:N
          for i=2:N
     
    M(t,n,i)= sum(M(:,:,1:i-1),3).*flipdim(a.^k(0:i-2),1));
     
    end
      end
    end
    ?

    Merci !

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

Discussions similaires

  1. somme des éléments d'une matrice
    Par virginie999 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/06/2008, 21h14
  2. Produit de matrices avec les map
    Par Butterfly83 dans le forum SL & STL
    Réponses: 7
    Dernier message: 30/11/2007, 15h22
  3. Somme des colonne d'une matrice
    Par nessing dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/08/2007, 13h41
  4. Somme de multiplications (produits) en XSL
    Par jejelafrite dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/06/2007, 10h11
  5. Produit de matrices en vba
    Par gcadieux dans le forum Général VBA
    Réponses: 4
    Dernier message: 26/09/2006, 16h54

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