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 :

script pour somme cumulee des elements d'un vecteur ligne.


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut script pour somme cumulee des elements d'un vecteur ligne.
    Bonjour, j'utilise la version MATLAB R2012a et je suis débutante en programmation.

    dans mon exercice , il est question de calculer la somme cumulée des 30 premiers entiers naturels.
    mon code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    clear all;
    b = [0:4];
    % c determine la somme cummulee des element de b
    c = []
    c = [c 0]
    for i = 1:length(b)
        c(i+1) = C(i)+b(i+1)
    end
    quand je l'exécute le message d'erreur suivant s'affiche :
    Undefined function 'C' for input arguments of type 'double'.
    je pense qu'il y a un problème d'initialisation avec c, comme je vous l'ai dit je suis débutante en programmation ( donc bien vouloir être indulgent s'il vous plait). Merci.

  2. #2
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut
    Allo,

    :''Undefined function 'C' for input arguments of type 'double'.''
    Attention, matlab est sensible à la casse. c n'est pas égal à C

    Quelques petits commentaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    b = [0:4]; % crochets inutiles -> b=0:4;
    % c determine la somme cummulee des element de b
    c = [] % les deux lignes qui suivent peuvent se simplifier par c=0; Concaténer une matrice vide et un scalaire va te rendre ce scalaire
    c = [c 0] 
    for i = 1:length(b)
    c(i+1) = C(i)+b(i+1) 
        % tu as un problème d'indice... à la fin de ta boucle, lorsque i=length(b), tu va aller lui demander de chercher length(b)+1, donc tu sors de ta matrice b
        % c différent de C
        % indente ton code pour plus de lisibilité
        % utilise le point virgule à la fin de ta ligne pour ne pas affiché les résultats à l'écran. Lorsque tu veux afficher quelque chose, il est préférable d'utiliser disp(tamatrice)
        % lorsqu'on utilise des matrices dans des boucles, il faut préallouer la mémoire. cf la FAQ. 
    end
    On attend ta correction !

    PS : il existe une fonction matlab qui fait tout ça pour toi mais je pense que l'exercice perd alors tout son intérêt.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    en lisant tes instructions j'ai réécrit mon code comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    b = 0:4
    c = 0
    for i = 1:length(b)-1;
        c(i+1) = c(i) + b(i+1);
        disp(c)
    end
    je sais qu'on le fait avec la fonction cumsum. cependant le but de l'exercice est de générer le même résultat sans passer par cette fonction.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Et si le premier terme de b est non nul ?
    Pense aussi à appliquer la dernière ligne de commentaire de thecrazydonut.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Bonjour,

    Et si le premier terme de b est non nul ?
    Pense aussi à appliquer la dernière ligne de commentaire de thecrazydonut.
    je ne comprends pas très bien la dernière ligne du commentaire de thecrazydonut.( en fait je ne saissis pas bien ce qu'il me donne comme instruction).

  6. #6
    Membre chevronné
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Par défaut
    Citation Envoyé par bellpaola Voir le message
    je ne comprends pas très bien la dernière ligne du commentaire de thecrazydonut.( en fait je ne saissis pas bien ce qu'il me donne comme instruction).
    Ce que je voulais dire c'est que dans un cas où tu fais quelque chose qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=1:10
        x(i)=rand; 
    end
    il faut d'abord initialiser ta matrice x avant ta boucle par quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x=ones(1,10);
    %ou 
    x=zeros(1,10);
    %ou encore 
    x=NaN(1,10);
    Ça évite des problème de mémoire et ton code tournera beaucoup plus vite (ok, pour une itération dans ton cas tu ne verras pas la différence, mais c'est quelque chose qu'il faut prendre l'habitude de faire).

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

Discussions similaires

  1. script pour la gestion des quotas
    Par youness_ka dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/05/2007, 10h20
  2. [Noob] Script pour la gestion des dates
    Par Konrad Florczak dans le forum Langage
    Réponses: 19
    Dernier message: 02/10/2006, 18h24
  3. Script pour faire défiler des infos
    Par waddle dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2006, 14h54
  4. Recherche script pour visualisation UML des jointures
    Par messier79 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 12/12/2005, 13h40

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