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 :

erreur avec importdata [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut erreur avec importdata
    bonjour à tous!

    J'ai un petit problème, je n'arrive pas à importer des données numériques de fichiers texte que j'ai regroupés dans un dir;

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     pat = fopen ('faisceauprot1.txt','wt');
     
            liste=dir('Protocole_1\faisceau1\*.txt');
     
            for i=1:numel(liste)
     
               nom1=sprintf('liste(%d)',i);
               lire = importdata(nom1);
               s = ((i-1)*s+std(lire(:)))/i;
    l'erreur est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ??? Error using ==> importdata at 136
    Unable to open file.
     
    Error in ==> dose_per_seance at 17
                lire = importdata(nom1);
    C'est probablement pas grand-chose, mais je ne vois pas trop quelle erreur logique j'ai faite...

    Je vous remercie par avance de prendre quelques minutes pour me répondre

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

    D'après ce que j'ai compris de ce que tu veux faire, la liste des fichiers que tu veux lire avec importdata est contenue dans ta variable liste, il faut donc que tu utilises le contenu de cette variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    liste=dir('Protocole_1\faisceau1\*.txt');
    for i=1:numel(liste)
        nom_i = fullfile('Protocole_1','faisceau1',liste(i).name);
        lire = importdata(nom_i);
        s = ((i-1)*s+std(lire(:)))/i;
    end

  3. #3
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup Winjerome!

    C'est nickel, il me génère bien le fichier que je veux, et toutes mes variables (que j'ai observées en mode Debug) semblent prendre les valeurs souhaitees.. toutes sauf une, je fais une erreur de logique dans le calcul de mon écart type je crois, il reste systématiquement égal à 0...

    voici un bout de mon code:

    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
    s=0;
     
             case 'protocole1'
     
     
            sprintf('faisceauprot1.txt');
            pat = fopen ('faisceauprot1.txt','wt');
     
            liste=dir('Protocole_1\faisceau1\*.txt');
     
            for i=1:numel(liste)
     
                nom_i = fullfile('Protocole_1','faisceau1',liste(i).name);
                lire = importdata(nom_i);
     
                s = ((i-1)*s+std(lire(:)))/i;
     
            end
    Je ne crois pas que cela soit du à l'initialisation..C'est dans mon calcul, pourtant je pense qu'il faut bien pondérer le nouvel écart type à chaque tour de boucle par le nombre de tours qui ont déjà été faits non?

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    Je suppose que tu veux la moyenne de tes écart-types. J'ai vérifié rapidement ta formule fonctionne, le problème ne vient pas de là.

    Pourrais-tu nous donner un exemple de valeurs que tu as dans ta variable 'lire' ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    La variable lire (qui change donc à chaque tour de boucle) consiste en un simple nombre entre 0 et 1 (exemple: 0.4985 ; 0.7562....)

    Du coup je fais la moyenne de l'écart type à chaque fois que j'ajoute une valeur de lire...mais ca veut pas

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur opto-électronique
    Inscrit en
    Avril 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur opto-électronique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2010
    Messages : 129
    Points : 157
    Points
    157
    Par défaut
    S'il n'y a qu'un seul nombre dans ta variable lire, c'est absolument normal que ton écart type soit nul.

    L'écart-type représente la distance moyenne entre tes données et la moyenne de ces données. Si tu n'as qu'une donnée, la moyenne est égale à cette donnée et donc l'écart-type est nul.

    Si tu veux un écart-type, il te faut plusieurs valeurs. Si tu veux l'écart type de l'ensemble de ta liste, stocke les dans une variable et calcule la std de cette variable en sortie de boucle. De même pour la moyenne (simple question de gain de temps là).

  7. #7
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Je sais bien qu'on ne peut prendre un écart-type qu'entre 2 nombres minimum lol, c'est juste que je pensais que dans ma manière de l'écrire il prenanit en compte le premier "lire" et qu'il ajoutait le nouveau à chaque fois...

    Merci en tout cas pour ton conseil, je vais faire ca et je reviens ^^

  8. #8
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    c'est bon

    pour le fun voici le code:
    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
    case 'protocole1'
     
     
            sprintf('faisceauprot1.txt');
            pat = fopen ('faisceauprot1.txt','wt');
            pat2 = fopen ('temp1.txt','wt');
            liste=dir('Protocole_1\faisceau1\*.txt');
     
            for i=1:numel(liste)
     
                nom_i = fullfile('Protocole_1','faisceau1',liste(i).name);
                lire = importdata(nom_i);
                fprintf(pat2,'%d\n',lire);
     
            end
     
            nom_i = fullfile('temp1.txt');
            temp1=importdata(nom_i);
            s = std(temp1(:));
    Merci à tous en tout cas, c'est super cool de m'avoir aidé, et si vite en plus!!

    Au plaisir de vous aider un jour

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

    Pourquoi ne pas remplir ta variable lire comme un tableau pour ensuite l'utiliser pour calculer la std?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    lire = zeros(numel(liste),1); % pre-allocation
    for i=1:numel(liste)
        nom_i = fullfile('Protocole_1','faisceau1',liste(i).name);
        lire(i) = importdata(nom_i);
        fprintf(pat2,'%d\n',lire(i));
    end
    s = std(lire);

  10. #10
    Nouveau membre du Club
    Profil pro
    Physicien médical
    Inscrit en
    Juillet 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Physicien médical
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2010
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    oui effectivemen c'est plus logique et moins lourd..j'ai fait comme ca , merci encore^^

  11. #11
    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 : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Winjerome Voir le message
    Pourquoi ne pas remplir ta variable lire comme un tableau pour ensuite l'utiliser pour calculer la std?
    Et aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    lire = zeros(numel(liste),1); % pre-allocation
    for i=1:numel(liste)
        nom_i = fullfile('Protocole_1','faisceau1',liste(i).name);
        lire(i) = importdata(nom_i);
    end
    fprintf(pat2,'%d\n',lire);
    s = std(lire);
    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)

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

Discussions similaires

  1. [importdata] Erreur avec array de caractères
    Par tom3w dans le forum MATLAB
    Réponses: 6
    Dernier message: 07/02/2008, 11h13
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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