/* sim_difeq.c solve simultaneous differential equations */ /* by Runge-Kutta by Gills method */ /* */ /* solve system of equations Y_i = Y'_i(X, Y_1, ..., Y_n) for i=1,n */ /* */ /* user sets N number of equations (in N dependent variables) */ /* Y array of N dependent variables with initial values */ /* F array of N first derivatives of Y's (computed in loop) */ /* Q array of N for use by Runge */ /* X independent variable with initial value */ /* XLIM limit value of X with value */ /* H step size, delta X with value */ /* M setp counter, initialize to zero */ /* K returned 1=compute derivatives, 2=have Y values at X+H */ #include int Runge(int N, double Y[], double F[], double Q[], double *X, double H); /* Gills method */ int main(int argc, char *argv[]) { const int N = 4; /* number of equations */ double Y[N]; /* dependent variables */ double F[N]; /* computed derivatives, Y' */ double Q[N]; /* temporaries for Runge */ double X, XLIM, H; int i, K; printf("sim_difeq.c solving %d equations \n", N); X = 0.0; /* initial independent variable */ XLIM = 1.0; /* final value of independent variable */ H = 0.1; /* step size */ /* initial condition for dependent variables */ for(i=0; i