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 :

Calculer la somme des éléments positifs d'une matrice par 2 méthodes


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut Calculer la somme des éléments positifs d'une matrice par 2 méthodes
    Bonjour à tous

    Je me casse beaucoup la tête à essayer de résoudre le problème suivant:

    Écrire une fonction qui calcule la somme des éléments positifs d’un vecteur en utilisant deux méthodes
    différentes.

    Comme préconditions, on a la donnée suivante:

    Lors de l’appel de la fonction le paramètre d’entrée est un vecteur.

    Le traitement est le suivant:

    Le nom du fichier fonction est: possum.
    Première ligne de la fonction: function SP=possum(x).
    La fonction utilise d’abord des boucles et des conditions afin de déterminer la somme des éléments
    positifs du vecteur x.
    La fonction utilise ensuite la commande find.
    La structure switch est utilisée pour passer d’une méthode de solution à l’autre.
    La somme est assignée dans SP, le paramètre de sortie de la fonction.

    Les post-conditions sont les suivantes:

    Lors de l’exécution de la fonction le paramètre de sortie de la fonction est la somme des
    éléments positifs du vecteur d’entrée. Il ne doit y avoir aucun autre affichage provenant
    de l’exécution de la fonction.

    En guise d'exemple, pour vérifier si la fonction marche, l'enseignant nous demande de vérifier nos affaires avec un autre fichier script, dans lequel on va rentrer un vecteur et on l'écrit de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme=possum([15 -6 0 8 -2 5 4 -10 0.5 3])

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut Ce que j'ai de fait à date
    Étant donné que je n'arrives pas à la bonne réponse par la première méthode, je n'ai pas encore utilisé la fonction «Switch».

    J'ai juste créé, dans le script «possum» la boucle qui calcule la somme et ça ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function SP=possum(x)
    n=length(x);
    for k=1:n
        if x(k)>0
            SP=sum(x);        
        elseif x(k)<0
            SP=0;     
        end
    end

    On est supposé, en écrivant dans un autre script la chose suivante ,arriver à une réponse de 35.500 et j'arrives à 17.500:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme=possum([15 -6 0 8 -2 5 4 -10 0.5 3])

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 134
    Par défaut
    Essaie ceci, ou X est ton vecteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> sum(find(X<0));
    >> sum(fin(X>=0));

  4. #4
    Membre émérite Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Par défaut
    salut
    tu aurais du te rendre compte par toi-même que tu obtenais la somme totale du vecteur, ce qui est logique puisque ton dernier élément est positif. tu aurais obtenu 0 s'il avait été négatif.
    il faut essayer de voir d'où vient le problème (en essayant divers cas) et de le comprendre pour le résoudre

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut
    Salut à tous

    Oui, j'ai remarqué que la fonction faisait la somme de tous les éléments. Je n'ai pas compris pourquoi et là je viens de comprendre grâce à tubaas.

    J'ai essayé avec sum(x>0) et j'arrives déjà beaucoup plus près de la réponse, sauf qu'au lieu d'arriver à 35.500 j'arrives à 37

  6. #6
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function SP=possum(x)
    n=length(x);
    for k=1:n
        if x(k)>0
            SP=sum(x);        
        elseif x(k)<0
            SP=0;     
        end
    end
    Mais plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function SP=possum(x)
    n=length(x);
    sm = 0 ;
    for k=1:n
        if x(k)>0
            sm=sm + x(k);        
        end
    end
    SP=sm ;
    et pour l'autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> sum(x(find(x>0)))
     
    ans =
     
       35.5000
    Au final tu auras ceci :

    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
    >> x=[15 -6 0 8 -2 5 4 -10 0.5 3] ;
    >> 
    >> n=length(x);
    sm = 0 ;
    for k=1:n
        if x(k)>0
            sm=sm + x(k);       
        end
    end
    SP=sm 
     
    SP =
     
       35.5000
     
    >> 
    >> sum(x(find(x>0)))
     
    ans =
     
       35.5000
     
    >>

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut Merci énormément
    Merci beaucoup. Je viens de comprendre pourquoi j'étais complètement dans le champ.

    Il ne me reste qu'à plugger la commande "switch" et je vous redonne des nouvelles dès que ça va être fait puisque je ne l'ai pas encore essayé.

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

Discussions similaires

  1. calculer la somme des éléments d'un vecteur
    Par Chefcou dans le forum Général Python
    Réponses: 9
    Dernier message: 30/05/2012, 13h54
  2. [Turbo Pascal] Déterminant d'une matrice par la méthode des mineurs principaux
    Par afmimra dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/12/2009, 22h17
  3. Réponses: 2
    Dernier message: 11/08/2009, 13h48
  4. somme des éléments d'une matrice
    Par virginie999 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/06/2008, 21h14
  5. Réponses: 3
    Dernier message: 24/08/2006, 11h56

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