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 :

Remplir un vecteur à l'aide d'une boucle for


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Remplir un vecteur à l'aide d'une boucle for
    Bonjour,

    Je suis débutant sur matlab et nouveau ici, j'aurai besoin d'un petit coup de main pour un code matlab.

    Je veux créer une nouvelle colonne ( "cycle") avec les valeurs de "tcreep" avec un incrément de 100. Néanmoins, je veux commencer à la 18 ème ligne de "tcreep"
    Pour résumer: ligne 1 "cycle"= ligne 18 "tcreep"
    ligne 2 "cycle" = ligne 118 "tcreep"
    ligne 3 "cycle"= ligne 218 "tcreep"
    et ainsi de suite

    j'ai testé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i = 1:420
    for w = 18:42018
    cycle (i, : ) = tcreep (w, : );
     
    i+1;
    w+100;
    end
     
    end
    Je vous remercie d'avance pour votre aide !

  2. #2
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 75
    Points : 289
    Points
    289
    Par défaut
    Bonjour !

    Il n'y a pas besoin ici de deux boucles imbriquées. Une seule boucle suffit, les vecteurs ne comportent qu'une seule dimension.

    Il faut trouver une relation entre les deux indices parcourant les vecteurs. Si on appelle i l'indice parcourant le vecteur cycle, alors effectivement i prend toutes les valeurs entières entre 1 et 420.

    D'après ce que tu dis dans ton message, il faut aller chercher dans le vecteur tcreep la valeur présente à l'indice 18+100*(i-1) (soit 100*i-82).

    Le programme est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for i = 1:420
        cycle(i, :) = tcreep(100*i-82, :);
    end

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord, merci pour ta réponse.

    J'ai bien compris ce que tu veux faire, mais je me demande néanmoins pourquoi mon code ne marche pas, pourrai-tu m'en dire plus dessus ?

    Et je me demandais aussi, étant donnée que le vecteur colonne "cycle" n'existe pas, il n'y a pas besoin de le définir avant la boucle ? et avec ton code les donnés seront directement stockés dans le vecteur "cycle" ?

    Par ailleurs, j'aimerai savoir comment puis-je changer la valeur d'une ligne d'un vecteur. Imagions un vecteur X (1 colonne) 50 lignes, si je veux changer la valeur de la 35 ème ligne.

    Bonne soirée

  4. #4
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 75
    Points : 289
    Points
    289
    Par défaut
    Ton programme comporte plusieurs erreurs :
    • Les deux boucles imbriquées ne correspondent pas à la démarche "linéaire" du remplissage d'un vecteur.
    • Les lignes 5 et 6 ne comportent aucune affectation ; elles ne modifient aucune variable.
    • De toutes façons, cela serait inutile (et même déconseillé), car une boucle for gère elle-même la modification de sa variable.


    La notation correspond à "Pour i allant de x à y par pas de 1". Pour avoir un pas différent de 1 (appelons-le p), il faut écrire Une variable n'a pas besoin d'être déclarée avant d'être utilisée dans Matlab. Cependant, pour éviter de perdre du temps avec les réallocations de mémoire, il peut être utile d'écrire avant la boucle for : Pour plus d'infos, lire ceci.

    Pour changer une valeur dans un vecteur comme tu le demandes, il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X(35, 1) = nouvelleValeur;
    Bon courage !

Discussions similaires

  1. Comment dois-je remplir la condition d'arrêt d'une boucle for ?
    Par nevil dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/03/2010, 11h35
  2. Réponses: 4
    Dernier message: 15/02/2010, 10h38
  3. Aide sur une boucle for
    Par Kemanke dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 11/12/2008, 14h13
  4. Décrémentation à l'aide d'une boucle FOR-END
    Par fouad192007 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/06/2007, 17h54
  5. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23

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