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'une partie des éléments d'une matrice


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'une partie des éléments d'une matrice
    Bonjour,

    je voudrais générer sur Matlab la matrice G de dimension (T,N), où le terme général de G est défini en écriture mathématique par :

    Formule mathématique

    où U est une matrice de dimension (T,N,N).

    Je ne sais pas comment utiliser la fonction sum ici, car l'aide de Matlab explique que cette dernière somme l'ensemble des éléments suivant une des dimensions de la matrice à laquelle elle est appliquée.

    Or, je ne veux pas ici sommer tous les éléments de U suivant la dimension 3 (c'est-à-dire que je ne veux pas sommer de U(t,n,1) à U(t,n,N)), mais pour chaque colonne n de G je veux sommer de U(t,n,1) à U(t,n,n) (en excluant donc les termes de U(t,n,n) à U(t,n,N)).

    Pouvez-vous m'indiquer comment faire ?

    Merci beaucoup !

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur en science de l'environnement
    Inscrit en
    Août 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en science de l'environnement

    Informations forums :
    Inscription : Août 2013
    Messages : 97
    Points : 149
    Points
    149
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1:N
        somme{i} = sum(U(:,:,1:i),3)
    end

  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 !

    J'ai maintenant une expression plus compliquée à coder, et j'ai des difficultés à appliquer la formule précédente.

    Mon expression en termes mathématiques est la suivante :
    Formule mathématique


    avec a une constante prédéfinie et y une matrice prédéfinie.

    Pouvez-vous me donner une indication sur la façon de coder cela avec la fonction sum ?
    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
    Une alternative à l'utilisation de la fonction sum est l'utilisation de boucles for avec une ligne de code ou tu sommes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for i = 1:N
     
        Somme_num = 0;    % Init variables
        Somme_deno = 0;   %
        Somme_finale = 0; %
     
        for k = N-i+1:t+N-i
            Somme_num = Somme_num + (a^k) * y(k-(N-i),1);  % Somme numérateur
            Somme_deno = Somme_deno + a^k;                 % Somme dénominateur
        end
     
        Somme_finale = Somme_finale + U(:,:,i)*(Somme_num/Somme_deno); % Somme finale
     
    end
    Le résultat sera une matrice de dimensions t*n.

    Alex.

  5. #5
    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
    Bonjour,

    j'ai du mal à comprendre le principe de la sommation sur Matlab.

    J'ai essayé de partir d'un exemple un peu plus simple que le précédent (dont j'ai besoin aussi), c'est-à-dire :

    U=zeros(T,J,J);

    for t=1:T, for j=1:J U(t,j,1)=1

    for t=1:T, for j=2:J, for i=2:j


    Formule mathématique.


    Cette sommation est en fait ce qui doit me permettre de définir les différents termes de la matrice U (enfin, il ne s'agit pas à proprement parler d'une matrice puisqu'elle est de dimension 3). Tous les termes pour lesquels i>j restent ainsi égaux à zéro.

    Si je comprends bien le principe de la sommation sur Matlab, je dois d'abord définir une valeur initiale pour démarrer ma somme, mais dois-je l'indexer ?
    Dans mon cas, pour un t et un j donnés, le premier terme de ma somme est U(t,j,1) que j'ai défini comme étant égal à 1.

    Ensuite, je dois faire une boucle sur un quatrième indice (celui de la somme) donc j'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    U=zeros(T,J,J);
    for t=1:T
        for j=2:J
            for i=2:j
                for k=2:i
    U(t,j,k)=U(t,j,k)+U(t,j,i-1).*a.^(i-k-1);
                end
            end
        end
    end
    Ca ne me donne pas les résultats attendus, mais je pense que ça n'est pas étonnant : il y a trois choses qui me posent problème :

    1) en k=2, comment Matlab capte qu'il doit prendre U(t,j,k)=U(t,j,1) ? puisque ma boucle commence en 2. Je sais que ça se fait, mais pour moi c'est très bizarre d'avoir le même terme (U(t,j,k)) à gauche et à droite du signe égal. Je le comprends comme : Matlab prend à droite le dernier terme U(t,j,k) qu'il a gardé en mémoire puis il le remplace par le nouveau terme U(t,j,k) qu'il vient de calculer (donc un rang plus loin dans la somme). Mais comment peut-il capter qu'il faut qu'il commence en k=1 puisque ma boucle commence en 2 ?

    2) j'ai besoin de stocker chaque terme U(t,j,i) (mais pas les termes intermédiaires de la somme). Dans la formule de ma somme, k va de 1 à i-1. Mais si j'arrête la boucle sur k à i-1, alors je n'obtiendrai jamais mon terme U(t,j,i).

    3) la deuxième partie de ma somme : le terme U(t,j,i-1).*a.^(i-k-1) ne me semble pas correspondre à ce que je veux mais ce que je voudrais c'est que Matlab calcule ma somme en k à partir de la somme jusqu'en k-1 auquel il ajouterait le terme suivant dans la somme

    Pouvez-vous me donner un coup de main ?
    Merci beaucoup !

  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
    PS : je suis également preneuse d'une formule utilisant la fonction sum

    Merci !

Discussions similaires

  1. [DisplayTag] Affichage d'une partie des éléments d'une liste sur un critère
    Par jaguars_s dans le forum Taglibs
    Réponses: 4
    Dernier message: 30/07/2010, 18h15
  2. [WPF] appliquer un converter a une propriété des éléments d'une collection
    Par maa dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 23/01/2008, 21h39
  3. Réponses: 7
    Dernier message: 04/10/2007, 10h10
  4. Réponses: 9
    Dernier message: 08/08/2007, 11h35
  5. Limiter les droits à une partie des lignes d'une table
    Par Nabu dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/08/2006, 00h04

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