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 :

Liaison entre C et MATLAB


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Liaison entre C et MATLAB
    bonjour,
    je travaille sur un modèle ADM1, un modèle de simulation de digestion anaérobique. Un proffesseur m'a envoyer plusieurs fichiers dont un fichier C++ à compilier sous matlab.
    dans matlab jai fait: j'ouvre maintenant le fichier 'adm.c' avc DEV C++
    quand je compile ça me met:
    <<syntax error before '*' token >> 
    dans la ligne en rouge
    voici le code c:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    static void mdlInitializeSizes(SimStruct * S)
    {
        ssSetNumContStates(    S, 42);  /* number of continuous states           */
        ssSetNumDiscStates(    S, 0);   /* number of discrete states             */
        ssSetNumInputs(        S, 33);  /* number of inputs                      */
        ssSetNumOutputs(       S, 51);  /* number of outputs                     */
        ssSetDirectFeedThrough(S, 1);   /* direct feedthrough flag               */
        ssSetNumSampleTimes(   S, 1);   /* number of sample times                */
        ssSetNumSFcnParams(    S, 3);   /* number of input arguments             */
        ssSetNumRWork(         S, 0);   /* number of real work vector elements   */
        ssSetNumIWork(         S, 0);   /* number of integer work vector elements*/
        ssSetNumPWork(         S, 0);   /* number of pointer work vector elements*/
    }
    Que doit-je faire pour pouvoir compiler
    Merci bien d'avence

  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 882
    Points
    52 882
    Par défaut
    Tout ceci n'est pas très clair...

    Si tu souhaites compiler et utiliser un fichier C-MEX dans MATLAB, il n'y a pas besoin de Dev C++

    Tu fais simplement :

    Ceci crée un fichier adm.mex<arch> que tu peux directement utiliser dans MATLAB.

    Voir la FAQ : Fichiers MEX
    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 Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse, donc je ne compile plus le fichier dans c++? comment j'utlise alors le fichier adm. mexfile?
    si je veux l'appeler comme j'ai lu dans faq, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [sortie1 , sortie2 , ...] = nomFichier(entree1 , entree2 , ...)
    est ce que 'sortie' et 'entree' sont ceux défini dans le ficfier adm.? toutes mes escuse, je comprend pas le fichier parce que on me l'a envoyer pourque je l'exploite et j'ai vraiment du mal à avancé. merci

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    À voir l'extension, c'est plutôt du C que du C++...
    Vu l'erreur, je dirais qu'il manque la déclaration de la structure SimStruct.

    Si ce n'est déjà fait je te conseille la lecture de ce sujet de la FAQ, ainsi que des liens donnés à la fin.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    pourriez vous m'expliquer un peu ce code?

    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    #define S_FUNCTION_NAME adm1_ODE
     
    #include "simstruc.h"
    #include <math.h>
     
    #define XINIT   ssGetSFcnParam(S,0)
    #define PAR  	ssGetSFcnParam(S,1)
    #define V	    ssGetSFcnParam(S,2)
     
     
    /*
     * mdlInitializeSizes - initialize the sizes array
     */
    static void mdlInitializeSizes(SimStruct * S)
    {
        ssSetNumContStates(    S, 42);  /* number of continuous states           */
        ssSetNumDiscStates(    S, 0);   /* number of discrete states             */
        ssSetNumInputPorts(        S, 33);  /* number of inputs                      */
        ssSetNumOutputPorts(       S, 51);  /* number of outputs                     */
        ssSetDirectFeedThrough(S, 1);   /* direct feedthrough flag               */
        ssSetNumSampleTimes(   S, 1);   /* number of sample times                */
        ssSetNumSFcnParams(    S, 3);   /* number of input arguments             */
        ssSetNumRWork(         S, 0);   /* number of real work vector elements   */
        ssSetNumIWork(         S, 0);   /* number of integer work vector elements*/
        ssSetNumPWork(         S, 0);   /* number of pointer work vector elements*/
    }
     
     
    /*
     * mdlInitializeSampleTimes - initialize the sample times array
     */
    static void mdlInitializeSampleTimes(SimStruct *S)
    {
        ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);
        ssSetOffsetTime(S, 0, 0.0);
    }
     
     
    /*
     * mdlInitializeConditions - initialize the states
     */
    static void mdlInitializeConditions(double *x0, SimStruct *S)
    {
    int i;
     
    for (i = 0; i < 42; i++) {
       x0[i] = mxGetPr(XINIT)[i];
    }
    }
     
     
    /*
     * mdlOutputs - compute the outputs
     */
    static void mdlOutputs(double *y, double *x, double *u, SimStruct *S, int tid)
    {
      double R, T_base, T_op, P_atm, p_gas_h2o, P_gas, k_P, q_gas, V_liq, procT8, procT9, procT10, p_gas_h2, p_gas_ch4, p_gas_co2;
      double kLa, K_H_h2_base, K_H_ch4_base, K_H_co2_base, phi, S_H_ion, pK_w_base, K_H_h2o_base, K_H_h2, K_H_ch4, K_H_co2, K_w, factor;
      int i;
     
      R = mxGetPr(PAR)[77];
      T_base = mxGetPr(PAR)[78];
      T_op = mxGetPr(PAR)[79];
      P_atm = mxGetPr(PAR)[93];
      V_liq = mxGetPr(V)[0];
      kLa = mxGetPr(PAR)[94];
      K_H_h2_base = mxGetPr(PAR)[98];
      K_H_ch4_base = mxGetPr(PAR)[97];
      K_H_co2_base = mxGetPr(PAR)[96];
      K_H_h2o_base = mxGetPr(PAR)[95];
      pK_w_base = mxGetPr(PAR)[80];
      k_P = mxGetPr(PAR)[99];
     
      factor = (1.0/T_base - 1.0/T_op)/(100.0*R);
      K_H_h2 = K_H_h2_base*exp(-4180.0*factor);     /* T adjustment for K_H_h2 */
      K_H_ch4 = K_H_ch4_base*exp(-14240.0*factor);  /* T adjustment for K_H_ch4 */
      K_H_co2 = K_H_co2_base*exp(-19410.0*factor);  /* T adjustment for K_H_co2 */
      K_w = pow(10,-pK_w_base)*exp(55900.0*factor); /* T adjustment for K_w */
      p_gas_h2o = K_H_h2o_base*exp(5290.0*(1.0/T_base - 1.0/T_op));  /* T adjustement for water vapour saturation pressure */
     
      for (i = 0; i < 26; i++) {
          y[i] = x[i];
      }
    j'ai pu comprendre plus ou moins les commandes suivantes grac à l'aide matlab.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ssSetNumContStates
        ssSetNumDiscStates
        ssSetNumInputPorts
        ssSetNumOutputPorts     
        ssSetDirectFeedThrough
        ssSetNumSampleTimes
        ssSetNumSFcnParams
        ssSetNumRWork
    mais quel role jou
    Merci

  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 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 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Marlein Voir le message
    mais quel role jou
    Ce sont des macros
    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)

Discussions similaires

  1. liaison entre java et matlab
    Par hammasaidi dans le forum Graphisme
    Réponses: 2
    Dernier message: 13/10/2010, 21h40
  2. [MEX] Liaison entre C et MATLAB
    Par hanane78 dans le forum MATLAB
    Réponses: 10
    Dernier message: 27/09/2007, 16h25
  3. liaison entre plusieurs base de donnee
    Par GMI dans le forum Bases de données
    Réponses: 1
    Dernier message: 15/12/2004, 18h42
  4. Opérer une liaison entre 2 DBLookup
    Par pey dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 10h11
  5. Liaison entre un dblookupcombobox (filtre) et un dbgrid
    Par naw dans le forum Bases de données
    Réponses: 9
    Dernier message: 22/08/2004, 12h12

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