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 :

mexfile C et matlab


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile C et matlab
    bonjour tout le monde ;
    en fait mon probleme est le suivant ,j'ai crée une fonction en c qui se nomme calcul.c et maintenant je n'arrive pas a faire appel de cette fonction depuis un code matlab radio.m ,j'ai essayé de voir des tutorial sur mexfile mais j'ai pa su comment l'utiliser .
    est ce que quelqu'un peut m'aider ?
    prière de me répondre
    merci bien a tous.

  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 : 53 166
    Points
    53 166
    Par défaut
    Montre nous le code de cette fonction calcul.c

    Voici un exemple très simpliste :

    Code 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
    #include <stdio.h>
     
    double somme(double a, double b) {
        return a+b;
    }
     
    int main(void) {
        double a, b, c;
     
        a = 2.5;
        b = 4.8;
     
        c = somme(a, b);
     
        printf("\nLa somme de %3.1f et %3.1f vaut %3.1f\n", a, b, c);
     
        return 0;
     
    }

    Equivalent C-MEX :

    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
    #include "mex.h"
     
    double somme(double *a, double *b) {
        return a[0]+b[0];
    }
     
    void mexFunction( int nlhs, mxArray *plhs[],
            int nrhs, const mxArray *prhs[]) {
     
        double *a, *b, c;
     
        a = mxGetPr(prhs[0]);
        b = mxGetPr(prhs[1]);
     
        c = somme(a, b);
     
        mexPrintf("\nLa somme de %3.1f et %3.1f vaut %3.1f\n",a[0], b[0], c);
     
    }
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile c et matlab
    merci bien pour votre réponse
    en fait j'ai essaye d'appliquer ca sur ma fonction calcul.c et voila 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
    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
    #include "mex.h"
    #include "matrix.h"
    #include "fintrf.h"
    void calcul (double *x,  double *z,int n)
    {
     int i,j,k;
     double temp;
     double *b;
     b=x;
    for (i=1;i++;i<=n){
     
    z[i]=0;
    for (j=1;j++;j<=n){
     
         z[i]=z[i]+x[j]*b[j];
    }
     
    temp=b[n];
     
        for (k=1;k++;k<=n-1){
        b[n-k+1]=b[n-k];
        }
     
     b[1]=temp;
     }}
     
    /* The gateway function */
    void mexFunction( int nlhs, mxArray *plhs[],
                      int nrhs, const mxArray *prhs[])
    {
    /* variable declarations here */
     
         double *inMatrix;       /* 1xN input matrix */
         int ncols;           /* size of matrix */
         double *outMatrix;      /* output matrix */
     
    /* code here */
        if(nrhs!=1) {
        mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs",
                          "one inputs required.");
    }
    if(nlhs!=1) {
        mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs",
                          "one output required.");
    }
     
     
    /* create a pointer to the real data in the input matrix  */
    inMatrix = mxGetPr(prhs[0]);
     
    /* get dimensions of the input matrix */
    ncols = mxGetN(prhs[0]);
    /* create the output matrix */
    plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL);
     
    /* get a pointer to the real data in the output matrix */
    outMatrix = mxGetPr(plhs[0]);
    calcul(inMatrix,outMatrix,ncols);
     
    }
    je complique sur matlab avec la commande "mex calcul.c" et puis j 'essaie de le tester sur un vecteur de taille 3 mais ca me donne toujours une erreur .je me demande est ce que j'ai une erreur dans mon code.
    merci bien.
    prière de me rependre

  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
    Bonjour,

    quel est le message d'erreur?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile c et matlab
    bonjour
    lorsque je met par exemple un vecteur
    et je lance sur matlab ma fonction "calcul(a)" ca me donne cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> calcul(a)
    ??? one output required.
    en fait cette fonction doit retourner un vecteur de même taille que a mais la ca marche pas
    merci pour votre réponse

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile c et matlab
    j'ai passé des heure a tester mais toujours le même problème.
    voila ma fonction calcul.c

    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
    void calcul (double *x,  double *z,int n)
    {
     int i,j,k;
     double temp;
     double *b;
     b=x;
    for (i=1;i++;i<=n){
     
    z[i]=0;
    for (j=1;j++;j<=n){
     
         z[i]=z[i]+x[j]*b[j];
    }
     
    temp=b[n];
     
        for (k=1;k++;k<=n-1){
        b[n-k+1]=b[n-k];
        }
     
     b[1]=temp;
      }}
    est ce que quelqu'un pourrait m'envoyer le code C-mex de cette fonction ?
    j'en ai vraiment besoin ,merci d'avance

  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 : 53 166
    Points
    53 166
    Par défaut
    As-tu au moins vérifié que ton code C fonctionne ?

    Je pense que tu souhaites copier le contenu du tableau x dans le tableau b... si c'est le cas, la ligne que tu as codée ne copie pas le contenu mais l'adresse => http://c.developpez.com/faq/?page=ta..._tableau_copie

    Tu devrais revoir la syntaxe de la boucle FOR en C => http://melem.developpez.com/tutoriel...sions#LIII-F-6
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile c et matlab
    bonjour;
    merci bien pour votre réponse ca la fonction marche bien avec des valeurs réelles mais si jamais j'introduis des variable complexe j'obtiens des beugs sur matlab
    je crois que l'erreur est dans la déclaration de mes variable ,
    comment déclarer une variable complexe sur c?
    merci bien .

  9. #9
    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 : 53 166
    Points
    53 166
    Par défaut
    Pourquoi utiliser un fichier C-MEX dans ce cas ?
    Pourquoi ne pas directement coder ton algorithme sous MATLAB ?
    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)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 84
    Points : 38
    Points
    38
    Par défaut mexfile c et matlab
    bonjour;
    en fait j'ai implémenter ca sur matlab mais ca prend énormément de temps pour la simulation c'est pour ca j'ai voulu implémenter en c parce que je vais gagner énormément en temps de simulation mais j'ai pas su comment declarer des variables complexe en c ?

Discussions similaires

  1. [MEX] Passer un string d'un MexFile vers le MATLAB Workspace ?
    Par neoMatrix dans le forum MATLAB
    Réponses: 7
    Dernier message: 19/09/2007, 15h45
  2. [LabView-MATLAB] Conversion de fichier binaire
    Par flzox dans le forum LabVIEW
    Réponses: 3
    Dernier message: 20/01/2007, 18h42
  3. Réponses: 2
    Dernier message: 02/09/2005, 15h23
  4. Clone Matlab
    Par devmat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/04/2005, 16h44
  5. OpenGl - Matlab
    Par ManuG dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/01/2005, 15h04

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