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 :

rassembler des boucles for en une seule


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut rassembler des boucles for en une seule
    Bonsoir, j'aimerais regrouper 3 boucles for en une seule puisque la longueur parcourue est la même , de telle sorte sous la même boucle je dois finir fou d'abord le premier traitement pour passer au second et quand je finis le second je passe au troisième.

    for i=1:n
    finir traitement 1
    finir traitement 2
    finir traitement 3
    end

    au lieu de faire 3 boucles for pour chaque traitement. merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Et donc quel est le problème précis ?

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    salut winjerom, le seul problème c'est que j'en ai 3 boucles for et je veux savoir si je peux les regrouper en une seul boucle, puisqu'ils ont la même longueur (i=1:n), à condition de finir le premier traitement pour passer au second etc...
    Au lieu de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for i=1:n                                                  
        traitemnt1                                              
    end
    disp (resultat 1)                                         
    for i=1:n                                                 
        traitement 2
    end
    disp (resultat 2)
    for i=1:n
        traitement 3
    end
    disp (resultat 3)
    on va avoir ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:n
        traitement 1+disp
        traitement 2+disp
        traitement 3+disp
    end
    Note: les traitement sont bien dépendants, sans résultat du traitement 1 je ne peux pas effectuer traitement 2...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon j'avais déjà compris la première fois, merci pour ces précisions supplémentaires quelques peu inutiles...
    Maintenant, si tu nous disais quel problème réel tu rencontres à faire cela ?!

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bon, je ne sais pas comment vous l'expliquer! A mon avis si je vais incorporer ces 3 traitement dans la boucle for, j'aurais pour chaque i, un résultat pour chaque traitement ce qui est long, et même j'utilise une boite de dialogue pour chaque traitement donc je vais pas l'ouvrier et fermer n fois. En principe voila se que j'ai envie de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i=1:n
    Traitement1 (stop: traitement 1 doit avoir n valeurs pour passer au second)
    Traitement2 (stop: traitement 2 doit avoir n valeurs pour passer au troisieme)
    Traitement3 (stop: traitement 3 doit avoir n affichage à la fois (pile de données))
    end;

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Toujours pas très compréhensible mais si tu dois avoir n valeurs pour passer du traitement 1 au 2 alors tu dois boucler ta boucle entre 1 et 2 donc non, tu dois passer par plusieurs boucles ou alors j'ai rien compris.
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  7. #7
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Prenons le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for k = 1:3
        T1 = k;
        T2 = k+T1;
        T3 = k^2 + T2;
    end
    Et prenons ce code-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for k = 1:3
        T1 = k;
    end
     
    for k = 1:3
        T2 = k + T1;
    end
     
    for k = 1:3
        T3 = k^2 + T2;
    end
    Je voudrais que :
    1) tu me donnes les valeurs de T1, T2 et T3 dans le premier cas sans utiliser matlab
    2) tu me donnes les valeurs de T1, T2 et T3 dans le second cas sans utiliser matlab

    Peut-être que ce petit exercice te permettra de répondre toi-même à ta question ?

    Sinon, il va falloir que tu détailles exactement le point bloquant.

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonjour, je ne sais pas comment vous l'expliquer plus que ça admettant mon programme est constitué de 3 traitements (pré-traitement, affectation des données, affichage de ces résultats), et la longueur de la boucle parcourue pour chaque traitement est de 1:n. Donc j'ai voulu profiter par cet petit avantage, en regroupant ces traitements en une seul boucle allant de 1:n, et la condition est que pour passer au second traitement je dois tout d'abord finir les n exécutions pour l'étape du pré-traitement.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Commencer par répondre à nos question serait un très bon début...

    Je crois que nous avons suffisamment fait le tour de ce que tu veux faire, maintenant :

    Quel est ton problème ?

    Répondre au petit problème de tachmou serait je pense un bon moyen de le mettre en avant.

  10. #10
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Re-bonjour,

    Citation Envoyé par callofduty Voir le message
    Bonjour, je ne sais pas comment vous l'expliquer plus que ça admettant mon programme est constitué de 3 traitements (pré-traitement, affectation des données, affichage de ces résultats), et la longueur de la boucle parcourue pour chaque traitement est de 1:n. Donc j'ai voulu profiter par cet petit avantage, en regroupant ces traitements en une seul boucle allant de 1:n, et la condition est que pour passer au second traitement je dois tout d'abord finir les n exécutions pour l'étape du pré-traitement.
    Réponse avec ces nouvelles informations : je crois que tu ne peux pas tout mettre dans une seule boucle for.

    Malheureusement, tout dépend de ton traitement. Fais mon petit exercice, et tu comprendras que ça dépend précisément de ton cas. Donc tant que tu ne nous expose pas ce sur quoi tu travailles exactement, (tu peux poster ton code aussi), il nous est >>> IMPOSSIBLE <<< de répondre avec certitude.

    Si tu ne peux pas poster ton code (si tu travailles sur un projet secret défense ou autre...) : réponds à mon petit exercice extrêmement simple qu'un gamin de 10 ans est capable de faire ==> aucune difficulté, il te suffit juste d'y répondre, et tu comprendras tout très rapidement.

    Il te suffit de passer 30 secondes grand maximum pour répondre à mon problème. Ou bien, on peut continuer à causer pendant quelques années comme ça...

    Conclusion :

    1) Tu réponds à mon problème ==> je continue de t'aider
    2) Tu postes ton code ==> je continue de t'aider

    Tu fais ni 1) ni 2) ==> je te laisse tomber.

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonjour désolé pour vous les deux, j'ai pas reçu votre message tchemou, j'avais un problème de connexion. Donc voila je vais répondre à votre avec plaisir, et ça ne demande pas d'aller au matlab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for k = 1:3
        T1 = k;
        T2 = k+T1;
        T3 = k^2 + T2;
    end
    on aura: pour k =1 ,T1= 1, T2=1+1=2,T3=3
    pour k =2, T1= 2, T2=4,T3=8
    k =3, T1= 3, T2=6,T3=15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for k = 1:3
        T1 = k;
    end
     %T1=3
    for k = 1:3
        T2 = k + T1;
    end
    %T2=4, T2=5, T2=6
    for k = 1:3
        T3 = k^2 + T2;
    end
    % T3=7, T3=10, T3= 15
    identiques! mais je reviens à la première instruction, vous voyez bien que pour chaque k, j'aurais 3 variables T1, T2 et T3. Ce que je veux faire donc est de parcourir la variable T1 jusqu'a T1=3 pour aller exécuter T2, ensuite T2 doit égale a 6 pour passer à exécuter T3. Est ce que c'est claire??????

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Ce que je veux faire donc est de parcourir la variable T1 jusqu'a T1=3
    Sauf que tu dois faire quoi pour arriver à cela ?

    Citation Envoyé par callofduty Voir le message
    ensuite T2 doit égale a 6
    Même question ?

    Tu n'a pas compris le but de cet exercice.

  13. #13
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Re-bonjour,

    Bien !

    Donc tu as constaté que les deux résultats sont :

    Citation Envoyé par callofduty Voir le message
    identiques!
    FAUX ! PERDU ! (il y a des claques qui se perdent )

    Attention, c'est identique que pour k = 3 !
    1) Si effectivement c'est la dernière valeur qui t'importe, alors oui "c'est identique".
    2) Si toutes les valeurs comptent, alors "c'est différent" !

    Remarque : ces conclusion sont vraies dans ce cas d'étude uniquement !

    Tu as donc fait une erreur d'interprétation ici. Seules les valeurs pour k = 3 sont identiques. Regarde pour k = 2 ou k =1...

    Pour vérifier, remplis les tableaux suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Première méthode de calcul
    k   |  1  |  2  |  3  
    T1  |     |     |
    T2  |     |     |
    T3  |     |     |
     
    Seconde méthode de calcul
     
    k   |  1  |  2  |  3  
    T1  |     |     |
    T2  |     |     |
    T3  |     |     |
    As-tu compris 1) et 2) ?

    Si oui, il ne reste plus qu'à l'appliquer à ton cas d'étude. Tu peux poster ton code ici si tu veux qu'on te donne un avis. Mais je pense que tu peux trouver la réponse tout seul !

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Bonsoir tachmou,
    Attention, c'est identique que pour k = 3 !
    identiques uniquement pour k =3 (ce qui est en bleu uniquement).
    2) Si toutes les valeurs comptent, alors "c'est différent" !
    oui exact, c'est ce que je cherche d'ailler. Bon je te remercie infiniment tachmou, j'essaye à me débrouiller tout seul.

  15. #15
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par callofduty Voir le message
    Bonjour, je ne sais pas comment vous l'expliquer plus que ça admettant mon programme est constitué de 3 traitements (pré-traitement, affectation des données, affichage de ces résultats), et la longueur de la boucle parcourue pour chaque traitement est de 1:n. Donc j'ai voulu profiter par cet petit avantage, en regroupant ces traitements en une seul boucle allant de 1:n, et la condition est que pour passer au second traitement je dois tout d'abord finir les n exécutions pour l'étape du pré-traitement.
    Pourquoi n'introduit pas une sorte de condition qui te renverais au début de ta boucle.

    Je m'explique

    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
    A
    traintement 1
    if j< n éxécutions retour a A
    Else continu
    B
    traitement 2
    if j< n éxécutions retour a B
    Else continu
    C
    traitement 3
    if j< n éxécutions retour a C
    Else continu
    end
    Je ne sais pas si j'ai bien compris, mais tu à l'air de parler de conditions pour passer au traitement suivant, mais en gardant toujours la même boucle.

    c'est un peut comme les GOTO du langage basic qui permettent de renvoyer à un endroit précis dans le code.

    Est ce que celà existe sous Matlab ? Je n'ai pas la réponse :-(

  16. #16
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 286
    Points : 105
    Points
    105
    Par défaut
    Je ne sais pas si j'ai bien compris, mais tu à l'air de parler de conditions pour passer au traitement suivant, mais en gardant toujours la même boucle.
    Merci, oui exactement ça!je vais voir! moi j'ai pensé plutôt à utiliser while (i==n) au lieu de if. ça reste à tester, merci encore une autre fois. Peut tu me dire c'est quoi la variable j?

  17. #17
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    pas de soucis.

    Pour moi la variable j c'est un "compteur" qui va te permette de vérifier la condition que le nombre d'itération que tu souhaite faire pour le traitement 1 est vérifié, de même pour le traitement 2 et 3. il faudra l'initialiser avant ta boucle en lui attribuant la valeur 0 par exemple.

    Mais est ce que le traitement 1 2 et 3 doivent être répétés "n" fois (le "n" de la boucle for) ? Car si ce n'est pas le cas tu devra introduire 3 paramètres qui vont servir de compteur pour tes différentes boucles while.

    Est ce que j'ai été clair dans ma question et mon explication ?

  18. #18
    Membre averti Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par nekcorp Voir le message
    pas de soucis.

    Pour moi la variable j c'est un "compteur" qui va te permette de vérifier la condition que le nombre d'itération que tu souhaite faire pour le traitement 1 est vérifié, de même pour le traitement 2 et 3. il faudra l'initialiser avant ta boucle en lui attribuant la valeur 0 par exemple.

    Mais est ce que le traitement 1 2 et 3 doivent être répétés "n" fois (le "n" de la boucle for) ? Car si ce n'est pas le cas tu devra introduire 3 paramètres qui vont servir de compteur pour tes différentes boucles while.

    Est ce que j'ai été clair dans ma question et mon explication ?
    Essais ce bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    j=0
    n=5
     
        for i=1:n
            while j < n
            Traitement1= 2+i
            j=j+1
            end
        end
    tu peux te rendre compte que dans cette boucle Traitement1 vaudra toujours 3, et donc que le i ne s'incrémente pas dans la boucle while (ce qui est logique). En gros est ce que le résultat de Traitement1 dépendent de i ?

Discussions similaires

  1. Ecriture d'une matrice utilisant des boucles for !
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 26/02/2015, 21h02
  2. parcourir une boucle FOR qu'une seule fois
    Par Globolite dans le forum Langage
    Réponses: 14
    Dernier message: 21/06/2012, 09h32
  3. Réponses: 6
    Dernier message: 26/11/2007, 15h25
  4. [PhpToPDF] Problème de boucle - affichage d'une seule page
    Par romanus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/08/2007, 23h49
  5. tableaux dynamiques ds des boucles FOR imbriquees
    Par areuh_fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 13/12/2006, 11h12

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