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 :

Probléme avec des fonctions mex


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut Probléme avec des fonctions mex
    Bonjour,

    j'ai un script matlab qui contient des fonctions mex (code en C), Ce script donne de bons résultats. Je voulais juste réécrire ce script commefonction matlab pour l’appeler dans un autre programme. Mon problème est qu'en exécutant le programme, la fonction me renvoie des valeurs Not-a-Number (NAN) alors que j'ai rien modifié de particulier dans source du script.

    Je voulais savoir est ce que c'est le fait d'avoir des fonctions mex qui crée ce problème et si quelqu'un a une solution à ce problème

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    avec si peu de détail, on va difficilement pouvoir t'aider...

    Peux-tu nous montrer les codes utilisés dans le script et ceux lorsque tu le transforme en fonction?

    A priori si tu fais exactement la même chose, tu devrais obtenir le même résultat, fonction mex ou pas.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Voila je vous donne le script de départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    haut=200;
    fichier='fileStart';
    l=100;
    c=450;
    chemin='./Doc/decalage.mat'
    load(chemin)
     
    for i=1:size(decalage)
    hautNew=Haut+decalage
     
    [A1,B1] = get(fichier,l,c,hautNew);
    [A2,B2] = get(fichier,l,c,hautNew);
    end

    et j'ai transformé ce script en la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function [A1,B1,A2,B2]=fct(haut,décalage,fichier,l,c)
     
    for i=1:size(decalage)
    hautNew=Haut+decalage
     
    [A1,B1] = get(fichier,l,c,hautNew);
    [A2,B2] = get(fichier,l,c,hautNew);
    end

    C'est la fonction get qui est une fonction mex. et c'est A1 et B1 qui me donne les résultats "NAN" alors que les résultats sont correctes avec le script

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    get est le nom d'une fonciton matlab, il aurait mieux valu donner un autre nom à la fonction mex.

    Déjà, il y a une erreur : matlab est sensible à la casse donc haut et Haut, ce n'est pas la même variable.

    Ensuite, c'est normal que A1,B1,A2,B2 soient écrasés à chaque itération?

    Et quel code utilises-tu pour appeler la fonction fct?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Désolé c’était un exemple de ce que j'essaye de faire. Comme ça marchait pas j'ai essayé de simplifier le code pour voir l'erreur je calcule autre chose avec les variable A1 B1 A2 et B2. Voila le code un peu plus complet:


    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
    haut=200;
    fichier='fileStart.txt';
    l=100;
    c=450;
    chemin='./Doc/decalage.mat'
    load(chemin)
     
    for i=1:size(decalage)
    hautNew=haut+decalage
     
    [A1,B1] = get_Cor(fichier,l,0,hautNew);
    [A2,B2] = get_Cor(fichier,0,c,hautNew);
    larg1(i)=(A1+A2)/2
    larg2(i)=(B1+B2)/2
    end

    La fonction comme elle devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function [lag1,larg2]=fct(haut,décalage,fichier,l,c)
     
    for i=1:size(decalage)
    hautNew=haut+decalage
     
    [A1,B1] = get_Cor(fichier,l,0,hautNew);
    [A2,B2] = get_Cor(fichier,0,c,hautNew);
    larg1(i)=(A1+A2)/2
    larg2(i)=(B1+B2)/2
    end

    Voila c'est plus réaliste, pour ce qui est de l'appel de la fonction le script est assez simple. ça ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    chemin='./Doc/decalage.mat';
    load(chemin);
    chemin='./Doc/fileStart.txt'
    load(chemin);
    [l,c]=size(img); %avec img  une image que je lis avec imread
    % Puis la fonction
    [lag1,larg2]=fct(haut,décalage,fichier,l,c)

    Mais bon ça à pas beaucoup d'importance, même quand j'appelle cette fonction dans la console matlab en mettant tous les paramètres dans le corps de la fonction (genre c'est le script avec function au début) ça donne le résulta erroné

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par nassim1987 Voir le message
    ça ressemble à ça:

    Mais bon ça à pas beaucoup d'importance
    Ben si ça a de l'importance... Mets-toi à notre place : on ne sait pas ce que contiennent les variables, on ne sait pas ce que fait la fonction get_Cor, si en plus on doit deviner le code que tu utilises pour trouver tes erreurs... L'exemple que tu donnes est encore incorrect : la variable fichier n'est pas défini dans ton dernier script...

    Donc pour être clair, si tu fais :
    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
    haut=200;
    fichier='fileStart.txt';
    l=100;
    c=450;
    chemin='./Doc/decalage.mat'
    load(chemin)
     
    for i=1:size(decalage)
    hautNew=haut+decalage
     
    [A1,B1] = get_Cor(fichier,l,0,hautNew);
    [A2,B2] = get_Cor(fichier,0,c,hautNew);
    larg1(i)=(A1+A2)/2
    larg2(i)=(B1+B2)/2
    end
    tu obtiens un résultat différent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    clear
    [larg1 larg2] = test
    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
    function [larg1 larg2] = test
    haut=200;
    fichier='fileStart.txt';
    l=100;
    c=450;
    chemin='./Doc/decalage.mat'
    load(chemin)
     
    for i=1:size(decalage)
    hautNew=haut+decalage
     
    [A1,B1] = get_Cor(fichier,l,0,hautNew);
    [A2,B2] = get_Cor(fichier,0,c,hautNew);
    larg1(i)=(A1+A2)/2
    larg2(i)=(B1+B2)/2
    end
    ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Oui, c'est ça. en mode fonction le tableau large a des valeurs égales à NAN, alors qu'avec le script ça retourne un tableau large avec des valeurs correcte

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Pour être sûr, tu as testé avec exactement le même code que celui de mon dernier message?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    Merci pour ton aide magelan. j'ai réussi à trouver le problème il s'agissait d'une problème d’accès au fichier(le chemin) , le plus surprenant que dans d'autres fichiers qui sont dans le mêmes emplacement y a pas eu d'erreurs

    Merci bcp.

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

Discussions similaires

  1. [GD] Problème avec des fonctions qui créent des éléments dans une image.
    Par magnus2229 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 13/07/2011, 10h38
  2. probléme avec des fonction caractére
    Par mioke dans le forum SAS Base
    Réponses: 6
    Dernier message: 01/03/2008, 13h03
  3. Réponses: 6
    Dernier message: 21/02/2008, 22h17
  4. Problème avec des beugs pour les mex-files
    Par fatenov dans le forum MATLAB
    Réponses: 2
    Dernier message: 30/11/2007, 02h26
  5. problème avec des fonctions
    Par teen6517 dans le forum Langage
    Réponses: 1
    Dernier message: 12/03/2007, 14h34

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