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 :

Différences de résultats entre MATLAB 6.5 et 7.8 [Débutant]


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Différences de résultats entre MATLAB 6.5 et 7.8
    Bonjour à tous
    J'ai un soucis concernant des macros que j'ai écrite sous Matlab 6.5 et que j'essaye de faire tourner sous Matlab 7.8 R2009.
    Les macros question ne font que de la manipulation de matrice. Il n'y a pas de calcul compliqué derrière. La macro va chercher des colonnes de données à des valeurs précises et les stocke dans un fichier txt. Dans la macro, il n'y a que des fonctions : find, dlmread, save, et des boucles for...end c'est tout.

    Quand je traite un fichier avec la macro et la version Matlab 7.8, et quand je fais la même chose (avec la même macro) mais sous la version Matlab 6.5. J'ai 2 résultats différents.
    Le bon résultat est donnée par la version 6.5 en comparant mes données d'entrée et de sortie.

    J'ai enregistré la macro avec la version 7.8 mais rien n'y fait....
    Voilà, je me demandais s'il y avait des précautions à prendre lors du changement de version. Je vais essayer d'autres manipulations pour trouver le problème.

    Si quelqu'un avait une idée, car j'ai presque plus de cheveux sur ma tête.
    Merci pour toute réponse.

  2. #2
    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 884
    Points
    52 884
    Par défaut
    Montre nous ton code ou donne nous un exemple pour que l'on puisse tester de notre coté
    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)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci
    le fichier d'origine (appelé image) est une matrice de taille n x 860 (environ)
    le fichier spectre du pixel permet d'aller de faire la correspondance entre les nombres d'ondes recherchés (nu1,2,3 etc) et sa position parmi les 861 termes. Une fois trouvé sa position par exemple la N°792, ça va dans le fichier "image" et puis ça extrait la colonne N°792 .
    J'espère que c'est pas trop confu
    J'ai mis en pièce joint un exemple de fichier utilisé
    Le fichier "sample" correspond au fichier demandé "Spectre de pixel"
    Le fichier Spec1-3 est le fichier "image"

    voilà 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    function extraction
    % Pour extraire l'intensité de 7 bandes Raman, il faut indiquer 
    % les nombres d'onde précisément qui ont été lus à partir des spectres sous
    % Labspec.  
    % Il faut sauvegarder Le fichier ligne ou cartographie en format TXT et
    % aussi un spectre ponctuel en format TXT
     
    nu1=0;
    nu2=0;
    lgn=0;
    fpictname=[];fpixname=[];filename=[];filesave=[];
     
     fpictname = input('Nom du fichier image ','s');
     fpixname = input('Nom du fichier spectre du pixel ','s');
     filesave = input ('Nom du fichier à sauvegarder ','s');
     
    nu1=input('Nombre d onde nu1 ','s');
    nu2=input('Nombre d onde nu2 ','s');
    nu3=input('Nombre d onde nu3 ','s');
    nu4=input('Nombre d onde nu4 ','s');
    nu5=input('Nombre d onde nu5 ','s');
    nu6=input('Nombre d onde nu6 ','s');
    nu7=input('Nombre d onde nu7 ','s');
     
    lgn=input('Nombre de lignes ','s');
    image = dlmread([fpictname,'.txt'],'	');
    spectre = dlmread([fpixname,'.txt'],'	');
    nu1=str2num(nu1);
    nu2=str2num (nu2);
    nu3=str2num (nu3);
    nu4=str2num (nu4);
    nu5=str2num (nu5);
    nu6=str2num (nu6);
    nu7=str2num (nu7);
    lgn=str2num(lgn);
    lgn=lgn-1;
     
    idx=find (spectre ==nu1);
    idx=idx-1;
    p1=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu2);
    idx=idx-1;
    p2=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu3);
    idx=idx-1;
    p3=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu4);
    idx=idx-1;
    p4=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu5);
    idx=idx-1;
    p5=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu6);
    idx=idx-1;
    p6=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    idx=0;
    idx=find(spectre== nu7);
    idx=idx-1;
    p7=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    NU=[nu1,nu2,nu3,nu4,nu5,nu6,nu7];
    P=[p1,p2,p3,p4,p5,p6,p7];
    P=[NU;P];
    save([filesave,'.txt'],'P','-ASCII','-TABS');

  4. #4
    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 830
    Points
    14 830
    Par défaut
    Bonjour,

    Je n'ai pas vraiment d'idée sur le pourquoi des différences (il faudrait pour cela que je puisse tester avec les 2 versions, que je n'ai pas).

    Par contre ton code, euh, j'espère que tu ne vas pas m'en vouloir mais je l'ai modifié quelque peu avec des conseils à l'intérieur
    (et aussi quelques questions) :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    function extraction
    % Pour extraire l'intensité de 7 bandes Raman, il faut indiquer
    % les nombres d'onde précisément qui ont été lus à partir des spectres sous
    % Labspec.
    % Il faut sauvegarder Le fichier ligne ou cartographie en format TXT et
    % aussi un spectre ponctuel en format TXT
     
    %ca ca ne sert a rien...
    % nu(1)=0;
    % nu(2)=0;
    % lgn=0;
    % fpictname=[];fpixname=[];filename=[];filesave=[];
     
    %Là ce serait mieux d'utiliser UIGETFILE ça évite les erreurs et ça
    %marchera même si le fichier n'est pas dans le même répertoire.
    %Ex :
    %[filename, pathname] = uigetfile('*.*', 'Nom du fichier image ');
    %fpictname=fullfile(pathname,filename);
     
    fpictname = input('Nom du fichier image ','s');
    fpixname = input('Nom du fichier spectre du pixel ','s');
    filesave = input ('Nom du fichier à sauvegarder ','s');
     
    nu=zeros(1,7);%initialisation du vecteur nu
    for k=1:7
        nu(k) = input(sprintf('Nombre d onde nu%d ',k));
        %si on enlève le 's' on a direct un nombre : ca évite le str2num
    end
     
    lgn=input('Nombre de lignes ');
    lgn=lgn-1;
     
    %image = dlmread([fpictname,'.txt'],'    ');
    % !! ne pas utiliser image comme nom de variable c'est le nom d'une
    % fonction MATLAB
    img = dlmread([fpictname,'.txt'],'    ');%ne sert pas dans la suite...
    spectre = dlmread([fpixname,'.txt'],'    ');
     
    for k=1:length(nu)
        idx=find (spectre ==nu(k));
        idx=idx-1;
        p(k)=dlmread([fpictname,'.txt'],' ',[0 idx lgn idx]);
    end
    P=[nu;p];
    save([filesave,'.txt'],'P','-ASCII','-TABS');
    Fais-en ce que tu veux.

    Sinon pour ton problème en quoi résident les différences entre les résultats ?

    Vu le peu de fonctions (car on dit fonction en MATLAB pas macro ) que tu utilises,
    il faudrait que tu testes le comportement de celles-ci unitairement dans chaque version :

    • FIND
    • DLMREAD (avec les options)

    A priori je pencherais plus pour une modification du comportement de DLMREAD

    [EDIT] Ah bah y'a NU qui est apparu pendant que j'écrivais, je corrige donc.
    Règles du Forum

    Adepte de la maïeutique

  5. #5
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci pour les modifications
    Je vais essayer avec ce script.
    c'est sûr que ça fait pro maintenant ! Si ça marche pas, je vais re-passer à l'ancienne version.

    Les différences de résultats c'est à dire:
    la fonction extrait les valeurs d'une matrice source.
    Quand je compare les valeurs extraites par la fonction et celle dans la matrice source. Elles sont égales, ce qui me prouve que ma fonction a bien fait son boulot. Par contre, avec la nouvelle version, les valeurs extraites ne sont pas égales avec la matrice source. Il y a des zéro, et valeurs qui ne correspondent pas. Ta proposition du "dlmread" est peu être bonne. Je vais regarder.


    Je suis un peu sous pression niveau timing. Mais je vais pas lâcher le morceau pour autant !
    "I'll be back !"
    Merci encore.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Problème fonction FIND
    J'ai fais un petit peu de chemin depuis la dernière fois. J'ai trouvé que c'était la fonction Find qui me posait problème.
    J'ai simplifié au maximum ma fonction précédente pour travailler plus facilement. Je la compliquerait après.

    Mon problème
    Quand j'effectue la fonction (ci-dessous) en mode pas à pas, je remarque que la fonction Find ne trouve pas l'indice de la variable de "nu1" dans ma matrice "fpixname". Il me signale un ensemble vide pour la variable "idx". Est ce que quelqu'un pourrait me corriger la la syntaxe des 2 lignes en rouge, s'il vous plait ?
    Merci d'avance pour le coup de main

    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
    clear
    fpictname=[];fpixname=[];filesave=[];
    
    fpictname = input('Nom du fichier image ','s');
    fpixname = input('Nom du fichier spectre du pixel ','s');
    filesave = input ('Nom du fichier à sauvegarder ','s');
    
    nu1=input('Nombre d onde nu1 ');
    
    eval (['load ', fpixname, '.txt', ';']) %charge dans workspace
    eval (['load ', fpictname, '.txt', ';'])
    
    idx=find (fpixname == nu1); %cherche la valeur nu1 dans le fichier fpixname
    p1=fpictname(:,idx); %extraire la colonne identifiée par Find
    
    save([filesave,'.txt'],'p1','-ASCII','-TABS');

  7. #7
    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 884
    Points
    52 884
    Par défaut
    Pas besoin de EVAL ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    load([fpixname '.txt']);
    load([fpictname '.txt']);
    En plus, pourquoi utiliser INPUT pour récupérer des noms de fichiers alors que la fonction UIGETFILE le fait très bien...

    Maintenant pour ton problème de FIND, lis d'abord ceci : Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?
    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)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci pour les rectifications
    En plus, pourquoi utiliser INPUT pour récupérer des noms de fichiers alors que la fonction UIGETFILE le fait très bien...
    Je ne rechine pas du tout à l'utiliser. Mais, étant (gros) débutant dans ce langage, je suis plutôt pragmatique, je résous d'abord mon problème après j'améliorerais mon script.

    Je pense avoir saisi concernant le truc concernant mon problème.
    J'ai essayé cette ligne de commande mais ça marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx=find(abs(fpixname-nu1)<eps);
    ce qui me dérange c'est que dans ma fonction quand je remplace le conteneur "fpixname" par le nom du fichier utilisé pour le test (Sample) ça fonctionne parfaitement

    Est ce que tu aurais une suggestion ?

  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 830
    Points
    14 830
    Par défaut
    Tu mets quoi comme valeur pour nu1 que l'on puisse tester ?
    (En supposant que le fichier est un de ceux que tu as mis dans un de tes posts précédents)
    Règles du Forum

    Adepte de la maïeutique

  10. #10
    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 884
    Points
    52 884
    Par défaut
    Ce que je ne comprend pas, c'est que tu cherches exactement une valeur.

    Comment peux-tu être sûr que cette valeur existe bien dan le fichier texte ?
    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)

  11. #11
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    çe n'est pas tout à fait les même, j'ai rajouté mes fichiers test
    Le fichier demandé Image est "Concatener"
    et le fichier demandé pixel est "Sample"
    La valeur du nu1 960.141
    la fonction trouve l'indice de 960 .141 dans Sample, et extrait la colonne entière correspondante dans Concatener.
    Merci
    Fichiers attachés Fichiers attachés

  12. #12
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Ce que je ne comprend pas, c'est que tu cherches exactement une valeur.
    Comment peux-tu être sûr que cette valeur existe bien dan le fichier texte ?
    La valeur que je recherche, je la lis à l'aide d'un autre logiciel (Labspec) et je note la valeur exacte. Ensuite avec Labspec, j'enregistre tout mes fichiers en txt un par un (oui très long), puis avec Matlab, je les concatene puis j'extrais d'un coup les valeurs correspondantes à celle recherchée (960.141).
    Je suis sur et certain de la valeur que je recherche.
    c'est depuis ma mise à jour que ça déconne, la fonction Find me trouvait tout le temps la valeur exacte. grrr

  13. #13
    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 884
    Points
    52 884
    Par défaut
    Essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx=find (Sample == nu1);
    Lorsque tu utilises LOAD avec seulement le nom du fichier, les valeurs contenues dedans sont stockées dans une variable qui prend le nom du fichier
    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)

  14. #14
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    J'ai fait fonctionner ma fonction en mode pas à pas dans 2 cas différents.

    1) quand j'utilise le conteneur fpixname, sa valeur est bien égale au nom que je rentre "Sample", et nu1 est bien égal à 960.141, mais la variable "idx" est vide (il m'a affiche 1x0 Double, je crois).

    2) quand je mets directement le nom du fichier Sample dans la macro, ça marche, la fonction Find localise la valeur nu1 dans la matrice sample, qui est 794.

    petite remarque, j'ai remarqué le même problème pour la ligne de code suivante
    1) si je garde le conteneur "fpictname", p1 est vide
    2) si je met directement le nom du fichier (qui est "Concatener") dans ma fonction, ça marche nikel. Ma variable p1 correspond bien à vecteur colonne, et avec les bonnes valeurs.

    Est ce que c'est ma syntaxe qui n'est pas bonne ?
    voir lignes de code en rouge au post n°6

  15. #15
    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 884
    Points
    52 884
    Par défaut
    Il y quelque chose que tu as mal compris...

    filename contient bien la chaîne de caractères 'Sample' mais cela n'a rien à voir avec la variable du même nom

    Quand tu fait load([filename '.txt']), MATLAB lis les données dans le fichier Sample.txt car filename contient 'Sample' et stocke ces données dans une variable qui s'appelle Sample, et non pas filename

    Donc (finame == idx) revient à faire ('Sample' == idx) (note bien les '' qui encadrent Sample)

    Il faut donc bien faire (Sample == idx) sans les '' car la variable qui contient les données et qui a été créée automatiiquement s'appelle bien Sample.

    Si tu n'est toujours pas convaincu, utilise la fonction WHOS juste après le LOAD et reagrde les dimensions des variables filename et Sample :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >> filename = 'Sample';
    >> load([filename '.txt']);
    >> whos
      Name            Size            Bytes  Class     Attributes
     
      Sample        861x2             13776  double              
      filename        1x6                12  char
    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)

  16. #16
    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 830
    Points
    14 830
    Par défaut
    Et sinon pour ne pas être obligé de connaitre le nom du fichier (ben oui c'est idiot de devoir l'écrire en dur), tu peux utiliser la sortie de LOAD et les champs dynamiques de structures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    S=load([filename '.txt']);
    tavariable=S.(filename);
    Règles du Forum

    Adepte de la maïeutique

  17. #17
    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 884
    Points
    52 884
    Par défaut
    Et encore mieux, on peut se tourner vers les fonctions de bas niveau pour contrôler soit même le nom des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fid = fopen([filename '.txt'],'rt');
       X = fscanf(fid,'%f %f',[2,inf]).';
    fclose(fid);
    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)

  18. #18
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci pour toutes ces réponses
    Je me disais bien que je confondais quelque chose .
    je vais les essayer demain.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Recherche scientifique
    Inscrit en
    Septembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Recherche scientifique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2008
    Messages : 22
    Points : 14
    Points
    14
    Par défaut [Résolu] Différences de résultats entre MATLAB 6.5 et 7.8
    Voilà, j'ai résolu mon problème .
    suite au post N°15, j'ai compris que je faisais une erreur en assimilant le conteneur "filename", qui contient la chaine de caractère du nom de fichier et la variable qui contient les données. wooo le

    J'ai résolu mon problème en utilisant la fonction eval
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    load([fpictname '.txt']);% charge dans le Workspace
    load([fpixname '.txt']);
    spectre = eval(fpixname);% charge le contenu dans la variable spectre
    img = eval (fpictname); % charge le contenu dans la variable img
    Merci pour votre aide. Je vais tenter d'améliorer ma fonction maintenant.
    Dernière question
    pour "les fonctions de bas niveau"
    est ce qu'il y a des articles dans la FAQ Matlab?. J'ai regardé mais je ne savais pas trop où chercher.

  20. #20
    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 830
    Points
    14 830
    Par défaut
    Utiliser EVAL c'est mal
    Ce serait mieux d'utiliser une des méthodes que l'on t'a proposé.
    Pour les fonctions de bas-niveau l'aide de MATLAB devrait suffire.

    [EDIT] Pour mettre un sujet en résolu il ne faut pas ajouter le tag [résolu] dans le titre mais plutôt cliquer sur le bouton en bas des messages
    Règles du Forum

    Adepte de la maïeutique

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] [atan2] Différence de résultat entre MATLAB et Excel
    Par rouday dans le forum MATLAB
    Réponses: 1
    Dernier message: 16/03/2014, 15h34
  2. Réponses: 4
    Dernier message: 19/07/2010, 10h27
  3. [AC-2000] Différence de résultat entre acpreview et Print d'un état
    Par riri2938 dans le forum IHM
    Réponses: 0
    Dernier message: 20/02/2010, 15h50
  4. Différence de résultat entre MATLAB et Scilab
    Par ABN84 dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/05/2008, 22h53
  5. Différence de résultats entre requêtes SQL et Criteria
    Par titoudemtl dans le forum Hibernate
    Réponses: 3
    Dernier message: 07/08/2006, 09h30

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