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

C Discussion :

Message d'erreur sur C: "variable d'état activer par défaut"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut Message d'erreur sur C: "variable d'état activer par défaut"
    Bonjour à tous,

    Je suis atuellement en train de réaliser un code en C et de le compiler sur R.

    Le problème est que lorsque je compile mon code en C j'ai le message suivant "f3I.c:34:0: attention : « I » redéfini [enabled by default]" "
    et lorsque j'ouvre le modèle sous R, celui ci ne fonctionne que pour certaines valeurs de paramètres.

    Le problème vient de la fonction f3 (le code est en entier à la fin de la discussion):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(*t<=te) f3=kapa;
    if(*t>te) f3 =  d*I;
    Je crois que C n'apprécie pas que j'utilise la variable d'état I, mais je souhaiterai faire varier mon paramètre tau en fonction de cette variable d'état dans mon modèle.
    j'ai essayer de réécrire le modèle autrement, par exemple en supprimant la fonction f3 et en l'insérer directement dans le modèle comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         if(*t<=te)
        dSdt = -betabis*S*I + alpha * exp(-kapa * (*t-t0)) * S * (1 - (S+I) / K )- delta*S ; 
        if(*t>te)
        dSdt = -betabis*S*I + alpha * exp(-d*I * (*t-t0)) * S * (1 - (S+I) / K )- delta*S ;
    Mais cela ne fonctionne pas non plus. Quelqu'un aurait il une idée de comment réécrire le code afin de ne plus avoir ce message d'erreur?

    Merci beaucoup pour votre aide et bonne journée.



    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
    70
    71
    72
    73
    74
     
    /* file lorenz.c */
    #include <R.h>
    #include <Rinternals.h>
    #include <Rdefines.h>
    #include <R_ext/Rdynload.h>
    #include <Rmath.h>
    #include <stdio.h>
    #include <math.h>
    #include <tgmath.h>
     
    static double parms[10];
    #define K parms[0]
    #define kapa parms[1]
    #define t0 parms[2]
    #define alpha parms[3]
    #define sigma parms[4]
    #define ts parms[5]
    #define te parms[6]
    #define gamma parms[7]
    #define beta parms[8]
    #define d parms[9]
     
     
    /* initializer  */
    void initmod(void (* odeparms)(int *, double *))
    {
        int N = 10;
        odeparms(&N, parms);
    }
     
    #define S y[0]
    #define I y[1]
    #define D y[2]
    #define R y[3]
    #define dSdt ydot[0]
    #define dIdt ydot[1]
    #define dDdt ydot[2]
    #define dRdt ydot[3]
     
     
    /* Derivatives and 1 output variable */
    void derivs (int *neq, double *t, double *y, double *ydot,
                 double *yout, int *ip)
    {
        if (ip[0] < 1) error("nout should be at least 1") ;
     
    double gammabis ;
    if(*t<=ts) gammabis=0* *t;
    if(*t>ts) gammabis=gamma; 
     
    double betabis ;
    if(*t<=ts) betabis=0* *t;
    if(*t>ts) betabis=beta; 
     
    double delta ;
    if(*t<=ts) delta=0* *t;
    if(*t>ts) delta=sigma *(1- exp(-kapa * (*t-ts)));
     
    double f3 ;
    if(*t<=te) f3=kapa;
    if(*t>te) f3 =  d*I;
     
    double tau ;
    tau=alpha * exp(-f3 * (*t-t0));
     
        dSdt = -betabis*S*I + alpha * exp(-tau* (*t-t0)) * S * (1 - (S+I) / K )- delta*S ; 
        dIdt = betabis * S * I - (delta+gammabis) *I;
     
    yout[0] = S + I  ;
     
    }
     
    /* END file mymod.c */

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est parce que tu as déjà un I de défini.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 12
    Par défaut
    Oui et c'est justement la valeur de ce I au temps t que je veux pour multiplier après avec d

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ton EDI ne te signale pas où était défini I précédemment?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Par "déjà défini", il faut comprendre que ton "I" est #define deux fois, possiblement différemment.
    C'est une faute.

    Au sens du C, #define crée un remplacement de texte dans le code source, ca ne déclare pas une "variable magique pour R".
    En réalité, I est remplacé partout par sa définition (à savoir, y[1]).

    Ca semble la manière de faire pour R, mais je conseillerai quand même de passer une des macros d'indices dans le tableau y, comme #define I_index 1, et un meilleur nom pour y (par exemple variables ou vars).

    le code serait vars[I_index].

Discussions similaires

  1. Message d'Erreur sur Outlook?
    Par mnina dans le forum Outlook
    Réponses: 6
    Dernier message: 13/04/2006, 10h22
  2. [Servlet] message d'erreur sur un OutputStream
    Par jehlg dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 05/04/2006, 17h03
  3. message d'erreur sur test module
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 23/11/2005, 20h19
  4. message d'erreurs sur copie de fichier
    Par screeminelle dans le forum C++
    Réponses: 9
    Dernier message: 01/11/2005, 14h21
  5. [CR10] Pquoi absence du message d'erreur sur les Nulls ?
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 30/11/2004, 15h30

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