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 :

Matlab qui "change mes valeurs", problème de format? [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut Matlab qui "change mes valeurs", problème de format?
    Bonjour à tous,

    Je poste ici, un problème ou plutôt une question.

    Je demande à matlab (version 7.6.0.324 mais pareil sur Matlab version 5.2.0.3084), de me créer une matrice d'une seule colonne et de la remplir de valeurs. Je lui indique (il me semble) les valeurs que je veux.

    Pourtant, certaines des valeurs que je retrouve dans cette matrice colonne, diffèrent de celles que j'avais demandées.

    Concrètement voilà mon code :
    Je créer un vecteur que je veux remplir (ici de longitudes) allant de -110 à 70 avec un incrément de 0.2 degrés. Matlab me le crée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >> whos
      Name        Size            Bytes  Class     Attributes
     
      a         901x1              7208  double
    A mon sens, les valeurs inclues dans "a" seraient par exemple:
    -110
    -109.8
    -109.6
    ...

    Ce qu'elles sont en fait pour une grosse partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a(1:3)
     
    ans =
     
      1.0e+002 *
     
      -1.100000000000000
      -1.098000000000000
      -1.096000000000000
    Mais pas pour toute.Si je tape:j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ans =
     
     -74.199999999999989
    Au lieu de -74.2, et ceci que ce soit le format long ou format short. Disons qu'en format short j'ai un chiffre arrondi, donc je ne m'en étais pas rendu compte tout de suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >> format short
    >> a(180)
     
    ans =
     
      -74.2000
    Mais après un test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a(180)==-74.2
     
    ans =
     
         0
    Il semblerait que ma valeur, que je voulais égale à -74.2 ne l'est pas...

    Quelqu'un a une idée de pourquoi Matlab fait ça?
    J'ai cherché dans le forum, du côté des "arrondis" mais je n'ai pas vraiment trouvé d'éléments de réponse.

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Matlab 5.2

    Réponse dans la
    Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?

    Même si le titre parait loin de ta question

    Et MATLAB n'y est pour rien le pauvre.

  3. #3
    Membre confirmé
    Homme Profil pro
    Post-Doc Ecologie
    Inscrit en
    Juillet 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Taïwan

    Informations professionnelles :
    Activité : Post-Doc Ecologie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2007
    Messages : 76
    Par défaut
    Cool Merci Caro-Line

    Dans la FAQ... Pourtant j'y passe régulièrement, mais j'avoue "virgule flottante", n'avait pas attiré mon attention.

    C'est pile les soucis quand on lit dans la FAQ:
    "Il est nécessaire d'être particulièrement vigilant lorsque des tests logiques d'égalité sont effectués sur ces nombres.

    A ma décharge, hier soir (je me suis pris la tête avec des test logiques pendant une partie de la soirée), je n'avais pas internet Donc pas de FAQ (hum hum je m'en sortirai comme ça...)

    Donc si je peux redonner un conseil (déjà donner par Caro-Line, Dut et tant d'autres), aller toujours toujours voire la FAQ


    et oui je travaille toujours de temps à autre avec Matlab 5...
    Encore Merci Caro

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour.
    Une autre solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear
    a=(-110:2e-1:70)';
    a1=(floor((-110:2e-1:70)*100)/100)';
    a(180)
    a1(180)
    a(180)+74.2
    a1(180)+74.2

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonsoir,

    Pour enrichir d'avantage les solutions proposées.

    a = -110 à 70 avec un pas de 0.2 => 70-(-110) = 180

    le nombre d'éléments du vecteur a est de : 180/0.2 = 900

    Ma solution :

    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=linspace(-110, 70, 900) ;
    >> numel(a)
     
    ans =
     
       900
     
    >> max(a)
     
    ans =
     
        70
     
    >> min(a)
     
    ans =
     
      -110
     
    >>

  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 317
    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 317
    Par défaut
    Citation Envoyé par kmaniche Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    >> a=linspace(-110, 70, 900) ;
    Euh... plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a=linspace(-110, 70, 901) ;
    Mais ce qui ne change (presque) rien au problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >> a=linspace(-110, 70, 901) ;
    >> a(180)
     
    ans =
     
      -74.2000
     
    >> sprintf('%.15f',a(180))
     
    ans =
     
    -74.200000000000003

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/04/2007, 13h22
  2. Chaine de caractère qui change de valeur
    Par HaTnuX dans le forum C
    Réponses: 7
    Dernier message: 03/12/2006, 23h58
  3. booléan qui change de valeur debug/release
    Par crealinks dans le forum MFC
    Réponses: 3
    Dernier message: 18/08/2006, 17h09
  4. Quotes sur des valeurs numériques
    Par shadeoner dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/05/2006, 14h56
  5. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16

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