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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 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
    Montre nous ton code ou donne nous un exemple pour que l'on puisse tester de notre coté

  3. #3
    Membre averti
    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
    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 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
    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.

  5. #5
    Membre averti
    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
    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 averti
    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
    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');

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

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