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 :

while et opérateur logique


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 25
    Points
    25
    Par défaut while et opérateur logique
    Bonjour,
    je voudrais savoir si cela était normal que une boucle while ne marche pas avec l'opérateur logique == ?
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a=[1 2 3 ;4 5 6; 7 8 9]
    b(1) =1;
    while ( b(1) == a(:,:) )
    disp(['salut'])
    b(1) = b(1) + 1;
    end
    ici b est un vecteur , j'ai simplifié sur le forum mais en réalité b est un vecteur.
    Mon problème est que rien ne se passe ! l'opérateur == ne semble pas marcher car quand je modifie le code pour placer un différent de ( ~= ) cela marche niquel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    b(1)=15
    while ( b(1) ~= a(:,:) )
    disp(['salut'])
    b(1) = b(1) - 1;
    end
    == ne marche pas mais ~= marche , c'est normal ?
    merci

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2013
    Messages : 189
    Points : 242
    Points
    242
    Par défaut
    l'opérateur == marche parfaitement pour les boucles while.
    Dans ton exemple, a(:,: ) représente tout le tableau. Tu compares donc un tableau 3*3 avec un chiffre, il est normal que ta condition ne soit jamais vérifiée vu que tes deux éléments ne sont pas de même nature.

    De plus si je peux me permettre un petit conseil, si tu veux comparer des chiffres, il me semble plus propre de faire un test du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    eps = 10^-6;
    if abs(nombre1-nombre2)<eps
    %ou
    while abs(nombre1-nombre2)<eps
    pour eviter les erreurs de virgules flottantes

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    merci
    mais ta remarque est la même pour le différent de ? car on peu pas comparer matrice et nombre .. or avec différent de cela marche.

    Comment je pourrais comparer un vecteur/variable avec matrice avec ta méthode ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    eps = 10^-6;
    if abs(nombre1-nombre2)<eps
    %ou
    while abs(nombre1-nombre2)<eps
    J'ai une matrice qui se remplie au fur et à mesure et je cherche si une valeure bien précise se trouve déjà dans le tableau . si cela est le cas alors je ne fera pas plusieurs calculs qui suivent.

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

    Citation Envoyé par Dombrai Voir le message
    Dans ton exemple, a(:,: ) représente tout le tableau. Tu compares donc un tableau 3*3 avec un chiffre, il est normal que ta condition ne soit jamais vérifiée vu que tes deux éléments ne sont pas de même nature.
    Ce n'est pas tout à fait vrai, la condition est fausse car tous les éléments du résultat de b(1) == a(:,:) ne sont pas "true".

    Aperçu de la documentation :
    Citation Envoyé par doc while
    An evaluated expression is true when the result is nonempty and contains all nonzero elements (logical or real numeric). Otherwise, the expression is false.
    Selon ce que tu souhaites obtenir comme résultat, les fonctions any et all te serviront sûrement
    plus de détails dans ce sujet de la FAQ

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    merci
    j'ai tenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    a=[1 2 3 ;4 5 6; 7 8 9]
    b(1) =1;
    while ( any(any(a(:,:)==b(1))==1) )
        disp(['salut'])
        b(1) = b(1) + 1;
    end
    ça a l'air de fonctionner !

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    La condition peut se simplifier en :

    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Ok Dut merci , j'ai voulu rajouter un any pour transformer en scalaire. je vais suivre tes conseils. Ce sera surement plus rapide pour l'ordinateur.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    L'idée ici est surtout de comprendre 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
    >> a = [1 2 3 ; 4 5 6 ; 7 8 9]
     
    a =
     
         1     2     3
         4     5     6
         7     8     9
     
    >> a(:)
     
    ans =
     
         1
         4
         7
         2
         5
         8
         3
         6
         9
    Voir le tutoriel Introduction à la gestion des matrices
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 71
    Points : 25
    Points
    25
    Par défaut
    Ahh j'avais pas vu la différence et !! Oui en effet je comprends maintenant ! merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2006, 15h47
  2. [EL] El et opérateur logique
    Par LeXo dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/07/2006, 21h28
  3. Opérateurs logiques en C
    Par bandit boy dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/07/2006, 13h16
  4. Opérateurs logiques: solution plus simple?
    Par p0Kep0K dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2006, 15h48
  5. [VBA] Condition - opérateurs logiques
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 07/10/2005, 10h22

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