Matlab : Problème de format dans boucle
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Matlab : Problème de format dans boucle



  1. #1
    invite2d9939ba

    Matlab : Problème de format dans boucle


    ------

    Bonjour,

    J'ai un souci dans ma boucle :

    Code:
    cpt=0
    While ..
    ...
    cpt=cpt+0.001;
    if cpt==1
     display('test1');
    elseif cpt==2
     display('test2');
    else
    end
    
    
    end
    Le souci c'est que je suis sur que cpt passe par 1 et 2 mais pas moyen de rentrer dans mes conditions if et elseif??? peut être un problème de format de données???

    Merci

    -----

  2. #2
    lou_ibmix_xi

    Re : Matlab : Problème de format dans boucle

    Est tu sûr qu'aprés ta boucle "while", cpt est égale à 0.999 ? De manière générale, c'est une très mauvaise idée de comparer des nombres à virgules flottantes, il vaut mieux fair un truc du genre:
    Code:
    if (abs (cpt - reference) < max_diff)
        ...
    end

  3. #3
    danyvio

    Re : Matlab : Problème de format dans boucle

    Mets une instruction juste derrière ou juste avant
    cpt=cpt+0.001;

    pour afficher le cpt et vérifier ta certitude de passer par les valeurs 1 ou 2, quitte à mettre un pas de +.01 pour ne pas encombrer par des milliers d'affichage
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  4. #4
    invite2d9939ba

    Re : Matlab : Problème de format dans boucle

    j'ai tout essayé, et cpt passe bien par 1 et et 2... mais j'ai trouvé le problème, en faisant "format long" je me suis apercu qu'il ne m'ajoutait pas toujours 0.001, mais des fois 0.00100000001 ou 0.000999999999 et du coup lors de ma différence le rsultat n'est pas nul... c'est un bug de matlab je pense. Pour résoudre mon problème, j'utilise une boucle for combiner avec un if..break..

  5. A voir en vidéo sur Futura
  6. #5
    lou_ibmix_xi

    Re : Matlab : Problème de format dans boucle

    Ce n'est absolument pas un bug de MATLAB, et c'est la démonstration de ce que je te disais:
    c'est une très mauvaise idée de comparer des nombres à virgules flottantes
    Regarde comment sont codés les chiffres flottants dans un ordinateur!

  7. #6
    ketchupi

    Re : Matlab : Problème de format dans boucle

    effectivement, ce n'est pas un bug, le codage des nombres à virgules (sur 32 bits je crois), et surtout des petits nombres, n'est pas précis. Il existe des incertitudes sur le codage des bits. Comme l'a dit Lou, mieux vaut comparer des nombres en relatif, par exemple avec l'une des inégalités dont il (elle) a parlées. Généralement, on utilise la variable eps.
    ++
    On ne force pas une curiosité, on l'éveille. Daniel Pennac

  8. #7
    lou_ibmix_xi

    Re : Matlab : Problème de format dans boucle

    Matlab utilise du 64 bits pour coder les nombres, mais ca ne change rien au problème...

    [HS]
    C'est bien "il", mais malheureusement on ne choisit pas son prénom sur les forums...
    [/HS]

  9. #8
    danyvio

    Re : Matlab : Problème de format dans boucle

    Je ne connais pas spécifiquement matlab, mais, m'étant frotté au cours de ma longue carrière à pas mal d'em*ts dans différents langages, je suggère ceci : au lieu de comparer sous la syntaxe :
    if cpt==1

    mettre

    if cpt==1.0

    C'est peut-être inutile, mais allez savoir...
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

Discussions similaires

  1. probleme d'indexage de boucle for avec matlab
    Par invitec45730b2 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 23/10/2007, 02h32
  2. fonction avec boucle for matlab
    Par invitee98002ab dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 03/07/2007, 16h21
  3. Optimisation boucle Matlab.
    Par invite01e6eb40 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 13/04/2007, 11h50
  4. MATLAB-pb d'initialisation de boucle
    Par invite230d05f5 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 20/07/2005, 15h08
  5. sortir d'une boucle en matlab
    Par invite5588902a dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 06/10/2004, 14h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.