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 :

index = variable?


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut index = variable?
    Bonjour,
    je souhaite attribuer les valeurs d'un tableau en fonction d'un index variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    compteur = 1;
    while c<=limite;
    tableau(1,compteur)=mavaleur;
    compteur=compteur+1;
    end
    J'ai le message d'erreur suivant :
    ??? Subscripted assignment dimension mismatch.
    Je suppose que le pb viens de l'indéxage. Mais je ne vois pas comment faire après avoir éplucher différentes aides.
    Quelqu'un pourrait-il m'aider?
    Merci d'avance.

  2. #2
    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
    Es-tu sûre que 'mavaleur' est un scalaire?

  3. #3
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par lunea Voir le message
    Bonjour,
    je souhaite attribuer les valeurs d'un tableau en fonction d'un index variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    compteur = 1;
    while c<=limite;
    tableau(1,compteur)=mavaleur;
    compteur=compteur+1;
    end
    J'ai le message d'erreur suivant :
    Je suppose que le pb viens de l'indéxage. Mais je ne vois pas comment faire après avoir éplucher différentes aides.
    Quelqu'un pourrait-il m'aider?
    Merci d'avance.
    Y a un truc que je comprends pas dans ton programme, la condition de ta boucle est soit vrai soit fausse au début. Si elle est vrai, elle le sera tout le temps : ni la variable "c" ni la variable "limite" ne change dans la boucle.

    Logiquement compteur incrémente indéfiniment : enfin disons que lorsque compteur dépasse la taille de ta matrice, Matlab est pas content

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par LordPeterPan2 Voir le message
    Y a un truc que je comprends pas dans ton programme, la condition de ta boucle est soit vrai soit fausse au début. Si elle est vrai, elle le sera tout le temps : ni la variable "c" ni la variable "limite" ne change dans la boucle.

    Logiquement compteur incrémente indéfiniment : enfin disons que lorsque compteur dépasse la taille de ta matrice, Matlab est pas content
    Bonjour,
    bien vu pour le c. Mais le pb n'est pas là.
    Je réécris donc le code pour être plus claire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    limite=nombre; % nombre de fichiers listés dans un dossier
    compteur = 1;
    while compteur<=limite;
    tableau(1,compteur)=mavaleur;
    compteur=compteur+1;
    end
    limite est un nombre fixe;
    le compteur s'incrémente de 1 jusqu'à limite;
    mavaleur est bien un nombre = lecture d'une valeur (nombre réel) dans un fichier que je veux placer dans une cellule de la matrice à la ligne 1 et la colonne compteur.
    Je pense que le pb vient de là. Le programme plante sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau(1,compteur)=mavaleur;
    La question est donc : est ce que l'on peut indiquer la ligne ou colonne d'une matrice (nommé ici tableau) par une variable?
    Merci pour votre aide.

  5. #5
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Je pense que limite vaut une valeur supérieur à la taille de tableau.

    Ensuite, pour simplifier le code et augmenter la rapidité de celui-ci je te propose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    limite=nombre; % nombre de fichiers listés dans un dossier
    tableau(1,1:limite) = mavaleur ; % fais exactement la même chose
    %compteur = 1;
    %while compteur<=limite;
    %tableau(1,compteur)=mavaleur;
    %compteur=compteur+1;
    %end

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    bonjour,
    bon, Dam avait bien vu : j'ai deux cas où mavaleur est une chaine de type char. J'ai essayé de le transformer en utilisant l'aide sur cell array mais cela ne fonctionne pas. Je crois que je n'ai pas tout compris.
    Avec les 2 codes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableau(2,1)={cellstr(mavaleur)}
    tablerau(2,1)=cellstr(mavaleur)
    j'obtient le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Conversion to double from cell is not possible.
    Bref, comment faire pour mettre mavaleur de type char dans mon tableau?
    Merci d'avance.

  7. #7
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    cellstr transfome un objet cell en un objet string (char).
    Toi tu dis que tu as un objet char et a priori dans tableau tu auras des numériques.
    Donc la fonction à utiliser est STR2NUM.

    Et sinon la solution de LordPeterPan2 ne te plait pas ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Rebonjour,

    j'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau{2,1}={ma valeur}
    et j'obtient le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ??? Cell contents assignment to a non-cell array object.
    ou en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau{2,1}=mavaleur{1,1};
    j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ??? Conversion to cell from double is not possible.
     
    ??? Cell contents reference from a non-cell array object.
    Sachant que et mavaleur='012345'.
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Name       Size                    Bytes  Class
     
    mavaleur   1x6                        12  char array
     
    Grand total is 6 elements using 12 bytes
    Bref, je suis bien embêtée.
    Merci pour votre aide.

  9. #9
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Tu as lu mon message ?
    Il faudrait que tu essayes de comprendre un peu mieux les différents types de données dans MATLAB.

    Cela donne donc (avec le code de LordPeterPan2 qui est quand même mieux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    limite=nombre; % nombre de fichiers listés dans un dossier
    if ischar(mavaleur) %mavaleur est de type char
       tableau(1,1:limite) = str2num(mavaleur); 
    elseif isnumeric(mavaleur) %mavaleur est de type numerique
       tableau(1,1:limite) = mavaleur ; 
    end

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    cellstr transfome un objet cell en un objet string (char).
    Toi tu dis que tu as un objet char et a priori dans tableau tu auras des numériques.
    Donc la fonction à utiliser est STR2NUM.

    Et sinon la solution de LordPeterPan2 ne te plait pas ?
    Merci Caro, mais en faisant str2num, mavaleur '012345' devient 12345 et je voudrai garder le zéro devant.
    La solution de LordPeterPan2 est très élégante, mais dans mon cas, j'incrémente les lignes et colonnes de mon tableau au fur et à mesure lorsque je lis des valeurs (char et double) dans des fichiers que j'ouvre les uns après les autres.
    Le pb vient de ce que je veux placer dans un tableau des données de type double et char.

  11. #11
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    OK donc la seule solution pour mixer différents types c'est de stocker dans un tableau de cellules.

    Méthode for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    limite=nombre; % nombre de fichiers listés dans un dossier
    compteur = 1;
    while compteur<=limite;
       tableau{1,compteur}=mavaleur;%tout simplement quelque soit le type de mavaleur
       compteur=compteur+1;
    end
    Méthode LPP2 (je me permets, ton pseudo il est trop long ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    limite=nombre; % nombre de fichiers listés dans un dossier
    tableau(1,1:limite) = {mavaleur} ; % fais exactement la même chose

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    Tu as lu mon message ?
    Ben non parce que j'étais en train d'essayer des choses
    Citation Envoyé par caro95470 Voir le message
    Il faudrait que tu essayes de comprendre un peu mieux les différents types de données dans MATLAB.
    C'est ce que j'essaye, mais bon je découvre au fur et à mesure de l'avancée de mon programme.

    En tout cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau(2,1)=str2num(mavaleur);
    fonctionne. Il me manque le zéro devant, mais au pire, je pourrai m'en passer, si je ne trouve pas mieux.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    OK donc la seule solution pour mixer différents types c'est de stocker dans un tableau de cellules.

    Méthode for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    limite=nombre; % nombre de fichiers listés dans un dossier
    compteur = 1;
    while compteur<=limite;
       tableau{1,compteur}=mavaleur;%tout simplement quelque soit le type de mavaleur
       compteur=compteur+1;
    end
    Ben le problème c'est qu'en écrivant ainsi j'ai le message d' erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ???? Cell contents assignment to a non-cell array object.
    Je n'arrive pas à comprendre.

  14. #14
    Expert éminent sénior
    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
    Points : 14 828
    Points
    14 828
    Par défaut
    Fais un :A mon avis comme tu avais précédemment définis tableau comme une matrice, MATLAB n'est pas content que tu essayes ensuite de le définir comme un tableau de cellules.

  15. #15
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par caro95470 Voir le message
    Méthode LPP2 (je me permets, ton pseudo il est trop long )
    Les jeunes de nos jours ne respectent plus rien

    Sinon pour revenir à ton code lunea, si limite ne change pas tu peux à la place d'une boucle while faire une boucle for non ?

    Sinon si tu tiens effectivement à avoir dans ton tableau "0125" au lieu de "125", il te faut alors un tableau de cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    limite=nombre; % nombre de fichiers listés dans un dossier
    tableau = cell(limite,1);
    for compteur = 1:limite;
       tableau{compteur}=mavaleur;
    end

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par LordPeterPan2 Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    limite=nombre; % nombre de fichiers listés dans un dossier
    tableau = cell(limite,1);
    for compteur = 1:limite;
       tableau{compteur}=mavaleur;
    end
    Rebonjour,
    merci cela fonctionne avec le tableau en cell. Il va falloir que je trouve des astuce pour trouver à quelle ligne se trouve mavaleur car dans ce cas find, ne fonctionne pas et ce sera tout bon.

Discussions similaires

  1. Notice: Undefined index & Variable
    Par MTHYC dans le forum Langage
    Réponses: 3
    Dernier message: 05/03/2012, 09h01
  2. [C# WPF]indexation variable boucle for
    Par luc648 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 07/06/2010, 08h43
  3. cellule a index variable
    Par emillio dans le forum Excel
    Réponses: 4
    Dernier message: 06/03/2008, 01h51
  4. Récupération de la variable Index
    Par Oncle_Pete dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/09/2007, 11h45
  5. [Tableau][matrices]changement d'index et variables variables
    Par The Wretched dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/04/2005, 11h01

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