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 ;
} |
Partager