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 :

Module matlab: probleme "unassigned output"


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Par défaut Module matlab: probleme "unassigned output"
    Je débute en matlab et j'ai quelques difficultés. Un module en C a été réalisé et je dois recoder ce module en c en matlab. Je vous donne donc le module en c suivi de ce que j'ai écrit en matlab:
    le module en c :
    Code C : 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
    void mc_dip_abcformula_correction(const as_abc_t* abc_in,     /* [IP]*/
                                      const int32_t* iterations,  /* [IP] nombre d'itération du module */
                                      as_abc_result_t* abc_out)
        int i;
        for (i = 0; i < iterations; i++) {
        float a = abc_in->a;
        float b = abc_in->b;
        float c = abc_in->c;
     
            if (a == 0) {
                abc_out->result1 = (b == 0 ? nanf("") : -c/b);
                abc_out->result2 = (b == 0 ? nanf("") : -c/b);
            }
            else {
                float delta = powf(b,2) - 4.0f * a * c;
                if (delta >= 0) {
                 abc_out->result1 = ((-b+sqrtf(delta))/2*a);
                 abc_out->result2 = ((-b-sqrtf(delta))/2*a);
                }
                else {
                 abc_out->result1 = nanf("");
                 abc_out->result2 = nanf("");
                }
           }
        }
    }
    A partir de ce module de référence. Je dois maintenant faire la meme chose mais en matlab et voila ce que j'ai fait:

    Code Matlab : 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
    % Entrees/Sorties : 
    % IP  abc_in [abc] : 
    % IP  iterations [int32] : nombre d'itération du module
    % OP  abc_out [abc_result] : 
    function [abc_out] = polynome(abc_in, iterations)
     
    for (i=0:iterations)
        a=abc_in();
        b=abc_in();
        c=abc_in();
     
     
    if (a==0)
        if (b==0)
            result1 = abc_out(NaN);
            result2 = abc_out(NaN);
        else
            result1 = abc_out(-c/b);
            result2 = abc_out(-c/b);
        end
     
    if (a~=0)
        delta = b^2 - 4*a*c;
        if (delta>=0)
            result1 = abc_out((-b+sqrt(delta))/2*a);
            result2 = abc_out((-b-sqrt(delta))/2*a);
            else
                result1 = abc_out(NaN);
                result2 = abc_out(NaN);
     
    end
     
        end
           end
     
     
    end
    Lorsque je réalise mon test unitaire le problème que j'obtiens est le suivant :
    [MATLAB:UndefinedFunction] Function 'eq' is not defined for values of class 'struct'.
    Comment dois je modifier mon code. Je débute en matlab comme je l'ai dit. sil vous plait aidez moi. merci beaucoup pour l'aide que vous pourrez m'apporter.

  2. #2
    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
    Le fait que j'ai ré-indenté ton code (dans l'éditeur de MATLAB faire CTRL+A puis CTRL+I) montre bien le problème.

    Je pense que tu as des END mal placés.
    En fait abc_out ne sera initialisé que si a est égal à 0.

    En plus tu as fait vraiment un copier/coller du code C sans vraiment réfléchir à la signification des choses.

    Par exemple es-tu sur que :
    correspond à ceci :
    Ne faut-il pas (dans le cas MATLAB) prendre en compte l'itérateur i ?

    Tu aurais aussi dû nous dire les valeurs que tu as prises en entrées pour tester.

  3. #3
    Membre habitué
    Inscrit en
    Février 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 10
    Par défaut
    Non justement je n'en suis pas sur du tout. Oui j'ai essayer de transcrire le code C le problème est que je n'ai jamais utiliser matlab alors je suis un peu perdu. Pour les valeurs j'ai pris a = 1; b=-3; c=2

  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
    Pourquoi tu as remodifié le code que j'avais tout bien indenté ?
    C'est re-tout moche, et re on voit pas bien les correspondances.

    En MATLAB chaque FOR et chaque IF doit avoir son END (qui sera placé sur la même colonne).

    Ce n'est pas parce que tu as placé tes 2 IF sur la même colonne qu'ils sont séparés.
    Là au contraire le if a~=0 est dans le if a==0, ce qui évidemment ne sert à rien puisque a ne peut être à la fois égale à 0 et différent de 0.

    Comme a =1, aucun des lignes de code n'est effectuée et abc_out n'est donc jamais instancié.

  5. #5
    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
    Aaah...en plus tu as modifié ton code

    Alors éditer son message c'est bien...tant que personne n'a répondu.
    Il se trouve que j'ai été revoir ton 1er message mais peu de gens le font donc si tu modifies le code poste ta nouvelle version dans un nouveau message s'il te plait, sinon ça va plus être clair du tout.

  6. #6
    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
    Pas besoin de traduire ton code.
    Regarde du coté des fichiers MEX

    Tu peux tout à l'inclure (quasiment) tel quel en tant que sous-fonction dans un fichier C-MEX

Discussions similaires

  1. [MySQL] Problème de rquête avec Quôte
    Par yom17 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 23/10/2006, 10h58

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