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 :

recupérer les données d'une boucle


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut recupérer les données d'une boucle
    Bonjour,

    bonnes fêtes et bonne année à vous tous tout d'abord!

    voici ma question et mon soucis:

    je souhaite récupérer dans une matrice des termes calculés au sein d'une boucle.
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i = 1:5
     x = i*2 
    end
    X = [x(i);1]'
    je voudrais que X = [2 4 6 8 10]

    il s'agit d'un exemple, d'où la simplicité du problème ici présenté.

    cordialement et merci pour vos réponses,

    maxime.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Bonjour

    Première chose, juste avant d'écrire un code, tu dois écrire [ C O D E ] sans espace nulle part et tu finis ton code par [ / C O D E ] (encore sans espace).

    Donc, ta boucle ne sert ici à rien, car tu ne précise pas l'indice où ton chiffre calculé doit être enregistré.

    Tu dois écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i = 1 : 5
       x(i) = i*2;
    end
     
    X=x
    Et tout ira pour le mieux....

    Bonne continuation

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    edit: lorsque le pas entre mes deux bornes n est pas defini entier, "l extraction" ne fonctionne plus...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for i = (1.0 : 0.1 : 5.0) 
     x(i) = i * 1.0
    end
     
    X=x

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    i doit être un entier...

    Tu dois avant ta boucle écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n=1;
    for i = (1.0 : 0.1 : 5.0) 
     x(n) = i * 1.0;
     n=n+1;
    end
     
    X=x
    Et le tour est joué...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    c est parfait, ca marche!

    mais je vais encore abuse de votre gentillesse et voici mon second problème:
    créer une matrice dt les coefficients sont liés à l indice i:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ipoutre0 = 1;
    ipoteau0 =1 ;
    h0 =1 ;
     
    n=1;
    for i = (0:0.1:10) ;
     x(n) = [1;(h0 );(i);(ipoutre0);(ipoteau0 );(h0*i);(h0*ipoutre0);(h0*ipoteau0);(i*ipoutre0);(i*ipoteau0);(ipoutre0*ipoteau0);(h0*i*ipoutre0);(h0*i*ipoteau0);(h0*ipoutre0*ipoteau0);(i*ipoutre0*ipoteau0);(h0*i*ipoutre0*ipoteau0)]
     resu(n) = ones(16,16) * x(n) ;
     resuvc1(n) = resu(n)(2,1);
     epsi1(n) = abs(abs(resuvc1(n)) - 0.0005);
     n=n+1;
    end
    bref, lors de la création de x(n), ca beug... et en mm temps, j en profite pour avoir votre avis sur l ecriture pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resuvc1(n) = resu(n)(2,1)
    merci encore de votre aide, en tant que debutant, j ai enormement de difficultes..

    cordialement,

    maxime.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Trois choses :

    1) Tu as le droit d'utiliser la propriété des "..." pour éviter d'avoir une ligne aussi longue et indigeste.

    2) Quel est ton message d'erreur exact de Matlab

    3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resuvc1(n) = resu(n)(2,1)
    ne veut rien dire

    Merci pour les infos...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    alors voici les reponses:

    1) impression ecrant en PJ (je travaille sous octave et je n arrive pas encore a utiliser toutes les possibilités du logiciel) pour le message d erreur.

    2) je souhaite extraire du vecteur resu d indice n le coefficient à la 2eme ligne, 1 colonne.

    j espere que cela sera suffisant.

    cordialement.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    Pour le x(n), essaye plutôt un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x(:,n) = [1;(h0 );(i);(ipoutre0);(ipoteau0 );(h0*i);(h0*ipoutre0);(h0*ipoteau0);(i*ipoutre0);(i*ipoteau0);(ipoutre0*ipoteau0);(h0*i*ipoutre0);(h0*i*ipoteau0);...
         (h0*ipoutre0*ipoteau0);(i*ipoutre0*ipoteau0);(h0*i*ipoutre0*ipoteau0)];
    ensuite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resuvc1(n) = resu(n)(2,1);
    ne veut rien dire

    Là, tu vas avoir un soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resu(n) = ones(16,16) * x(n) ;
    parce que dans cette ligne, tu essayes d'égaler un nombre (matrice 1*1) avec une matrice 16*16.

    Qu'est-ce que tu veux faire exactement?

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 172
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par mfontan Voir le message
    créer une matrice dt les coefficients sont liés à l indice i:
    c'est pas clair du tout pour moi, ce que tu veux faire avec ton indice i

    au fait pas besoin de mettre des parenthèses partout, c'ets pas ça qui faire marcher ton code;

    for i = 1:2:50 marche par exemple !
    dans ta matrice aussi : M = [ x*y ; x/y ; z] pas besoin de (x*y) ..

    ça allège la lecture

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    lorsque que j ecris x(n) = [.....]

    je veux créer une matrice 16x1 dt les coefficients sont créés soit en fonction de variables définies, soit a partir de variables liées à l 'indice i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resu(n) = ones(16,16) * x(n) ;
    est donc une multiplication entre 2 matrices 16x16 et 16x1



    EDIT: pour les parenthèses, promis, je ferai le nécessaire...

    en ce qui concerne mes indices:

    je fais varier un indice i ds un espace defini. a chaque valeur i, je cree une matrice 16x1 dt les coeffients sont fonction de i. puis je calcule une autre matrice a l aide de m (qui est égale à ones(16,16) ici mais qui est bien plus complique pour moi..). enfin j extrais de cette nouvelle matrice la 2eme ligne et compare cette valeur a une valeur de reference que je connais.

    l objectif est d optimiser la valeur de i pour avoir un ecart le plus faible possile.

    l indice n n est la que pour pouvoir indicer mes differentes varibles au sein de la boucle et correspond finalement au nombre d iterations.

    cordialement.

  11. #11
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    Ok. Dans ce cas, je pense que ce code va marcher. Maintenant, j'espère que c'est ce que tu veux^^ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ipoutre0 = 1;
    ipoteau0 =1 ;
    h0 =1 ;
     
    n=1;
    for i = 0:0.1:10
     x(:,n) = [1;(h0 );(i);(ipoutre0);(ipoteau0 );(h0*i);(h0*ipoutre0);(h0*ipoteau0);(i*ipoutre0);(i*ipoteau0);(ipoutre0*ipoteau0);(h0*i*ipoutre0);(h0*i*ipoteau0);...
         (h0*ipoutre0*ipoteau0);(i*ipoutre0*ipoteau0);(h0*i*ipoutre0*ipoteau0)];
     resu = ones(16,16) * x(:,n) ;
     resuvc1(n) = resu(2,1);
     epsi1(n) = abs(abs(resuvc1(n)) - 0.0005);
     n=n+1;
    end

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    too late...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    oups je n avais pas vu vos reponses, je regarde et je vous remercie encore par avance.

    merci bcp


    EDIT

    dsl de vous decevoir mais cela ne marche toujours pas. le probleme vient de la creation de x et de la faconde l indicer peut etre ?

    erreur de octave en PJ.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    oups, je n'avais pas vu ça. Ce serait mieux comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resu = ones(16,16) * x(:,n) ;
    Ensuite, il suffit d'utiliser la fonction min pour avoir la plus faible valeur de ton epsi1 et sa position.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    je suis vraiment dsl mais ca ne veux toujours pas fonctionner..

    rapport d erreur en PJ.

    la ligne123 correspond a la creation de x(:,n).
    Fichiers attachés Fichiers attachés

  16. #16
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    C'est bizarre, parce que sur ma machine, ça marche très bien.

    De plus, je viens de vérifier sur le net, et la synthaxe est la même entre octave et matlab concernant l'utilisation du ':'.

    Donc, là, je ne sais vraiment pas pourquoi Octave fait des siennes. Peut-être que quelqu'un d'autre aura la réponse...

    En attendant, tu peux toujours forcer x a avoir le bon nombre de lignes. Tu remplaces :

    par :


  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Si les ":" est aussi valable pour octave alors peut être que c'est le ";" qui n'est pas compris par octave...

    Ce qui ferait que x(:,n) n'est pas calculé...

    Merci de vérifier si la syntaxe du ";" est correct...

    Fais un petit test du style :
    et regarde le résultat...

    PS : retire les parenthèses... stp... Il en va de mon coeur... lol

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    bonjour,

    en fait le soucis vient des "....." que octave ne comprend pas.

    maintenant tout marche. Je vous remercie pour votre aide et votre acharnement.

    A l avenir je ferai attention aux parenthèses....

    cordialement,

    Maxime.

  19. #19
    Membre confirmé
    Avatar de Dam2227
    Inscrit en
    Juin 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Juin 2007
    Messages : 343
    Points : 487
    Points
    487
    Par défaut
    De rien^^.

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

Discussions similaires

  1. afficher les données d'une Boucle imbriquée
    Par doria_serine dans le forum BIRT
    Réponses: 8
    Dernier message: 20/08/2009, 19h11
  2. recupérer les données dans une iframe
    Par jamel3000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2007, 19h49
  3. Recupérer les données d'une chaine
    Par claralavraie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/07/2006, 10h34
  4. Recupérer les données d'une d'une relation
    Par Tsimplice dans le forum Oracle
    Réponses: 9
    Dernier message: 11/04/2006, 11h59

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