Boucle if qui ne fonctionne pas
Bonjour à tous!
Voilà je réalise un modèle en C que je compile après sous R. Mais voilà, j'ai deux de mes boucles if pour les paramètres gamma et beta qui ne
fonctionne pas car peut importe la valeur que j'attribue à ces deux paramètres, ils sont toujours de 0. Je crois que ça vient de la façon dont je les déclares mais je ne suis pas sûre et de toute façon je ne vois pas d'autre manière de les déclarés ( je suis novice en C).
Code:
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
|
static double parms[9];
#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]
/* initializer */
void initmod(void (* odeparms)(int *, double *))
{
int N = 9;
odeparms(&N, parms);
}
#define S y[0]
#define I y[1]
#define R y[2]
#define dSdt ydot[0]
#define dIdt ydot[1]
#define dRdt ydot[2]
/* 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") ;
if (*t<=te) gamma=0* *t;
if (*t>te) gamma=gamma;
if (*t<=te) beta=0* *t;
if (*t>te) beta=beta;
double tau ;
tau = alpha * exp(-kapa * (*t-t0));
double delta ;
if(*t<=ts) delta=0* *t;
if(*t>ts) delta=sigma *(1- exp(-kapa * (*t-ts)));
dSdt = -beta*S*I + tau * S * (1 - S / K )- delta*S ;
dIdt = beta * S * I- (gamma + delta )*I;
dRdt= delta*S +(gamma + delta)*I;
yout[0] = S + I + R ;
} |
J'ai essayer d'autre façon de l'écrire avec des accolades pour les if ou encore en faisant:
Code:
1 2 3 4 5 6 7
| double gamma1 ;
if(*t<=te) gamma1=0* *t;
if(*t>te) gamma1=gamma;
double beta1 ;
if(*t<=te) beta1=0* *t;
if(*t>te) beta1=beta; |
Mais à chaque fois rien ne marche, gamma et beta reste à 0.
Avez vous une idée de ce qu'il conviendrait de faire?
Merci beaucoup pour votre aide. ;)