Code:
#include <stdio.h>
#include <math.h>
/*float N(float S[n], float I[n], float R[n])
{
N[n] = 400.0;
N[n] = S[n] + I[n] + R[n];
return N[n];
}*/
float dSdt(float N, float S, float I, float R, float mu, float beta)
{
return mu*N - (beta*S*I) - mu*S;
}
float dIdt(float S, float I, float R, float mu, float beta, float gam)
{
return (beta*S*I) - gam*I - mu*I;
}
float dRdt(float I, float R, float mu, float gam)
{
return gam*I - mu*R;
}
int main ()
{
int i;
int n=20;
int t=10;
float S[n], I[n], R[n];
S[0]=1.;
I[0]=0.;
R[0]=0.;
//N=S+I+R therefore N=1 *** explain in write up this means that i can delete all "/N" because its just dividing by 1
float N, mu, beta, gam;
float Sk1, Sk2, Sk3, Sk4, Ik1, Ik2, Ik3, Ik4, Rk1, Rk2, Rk3, Rk4;
float h = (float)t/(float)n;
/*printf("Input numbers for x0, y0, h, and n.\n");
scanf("%f %f %f %f %f", &x0, &y0, &h, &n0); */
for (i=1;i<=n;i++) //??
{
Sk1 = dSdt(N, S[i-1], I[i-1], R[i-1], mu, beta);
Ik1 = dIdt(S[i-1], I[i-1], R[i-1], mu, beta, gam);
Rk1 = dRdt(I[i-1], R[i-1], mu, gam);
Sk2 = dSdt(N, S[i-1]+Sk1*h/2.0, I[i-1]+Ik1*h/2.0, R[i-1]+Rk1*h/2.0, mu, beta);
Ik2 = dIdt(S[i-1]+Sk1*h/2.0, I[i-1]+Ik1*h/2.0, R[i-1]+Rk1*h/2.0, mu, beta, gam);
Rk2 = dRdt(I[i-1]+Ik1*h/2.0, R[i-1]+Rk1*h/2.0, mu, gam);
Sk3 = dSdt(N, S[i-1]+Sk2*h/2.0, I[i-1]+Ik2*h/2.0, R[i-1]+Rk2*h/2.0, mu, beta);
Ik3 = dIdt(S[i-1]+Sk2*h/2.0, I[i-1]+Ik2*h/2.0, R[i-1]+Rk2*h/2.0, mu, beta, gam);
Rk3 = dRdt(I[i-1]+Ik2*h/2.0, R[i-1]+Rk2*h/2.0, mu, gam);
Sk4 = dSdt(N, S[i-1]+Sk3*h/2.0, I[i-1]+Ik3*h/2.0, R[i-1]+Rk3*h/2.0, mu, beta);
Ik4 = dIdt(S[i-1]+Sk3*h/2.0, I[i-1]+Ik3*h/2.0, R[i-1]+Rk3*h/2.0, mu, beta, gam);
Rk4 = dRdt(I[i-1]+Ik3*h/2.0, R[i-1]+Rk3*h/2.0, mu, gam);
S[i] = S[i-1] + (h/6.0)*(Sk1 + 2.0*Sk2 + 2.0*Sk3 + Sk4);
I[i] = I[i-1] + (h/6.0)*(Ik1 + 2.0*Ik2 + 2.0*Ik3 + Ik4);
R[i] = R[i-1] + (h/6.0)*(Rk1 + 2.0*Rk2 + 2.0*Rk3 + Rk4);
}
/*----------------------------------------------------------------------------------------------------------------*/
/*PLOT IT*/
/*----------------------------------------------------------------------------------------------------------------*/
// Open a plot window
if (!cpgopen("/XWINDOW")) return 1;
// Set-up plot axes
cpgenv(0.,1.,0.,1.,0,1);
// Label axes
cpglab("x", "y", "project");
//set colour to yellow
cpgsci(7);
//plot
cpgline(n+1,t,S);
// Pause and then close plot window
cpgclos();
}
Any help would be so greatly appreciated!!! Thank you so much in advance!