home *** CD-ROM | disk | FTP | other *** search
- desork(iter,h,x,y,dy,iflag)
-
- /* subroutine to solve second-order ordinary differential */
- /* equations y" = f(x,y,y') by Runge-Kutta method. */
-
- int iflag,iter;
- float dy[],h,x[],y[];
-
- {
- int i;
- float dyn,tk0,tm0,tk1,tm1,tk2,tm2,tk3,tm3,xn,yn;
- double ydopri();
-
- for(i = 0; i <= iter-2; i++)
- {
- tk0 = h * dy[i];
- xn = x[i];
- yn = y[i];
- dyn = dy[i];
- tm0 = h * ydopri(xn,yn,dyn,iflag);
- xn = x[i] + (h/2.);
- yn = y[i] + (tk0/2.);
- dyn = dy[i] + (tm0/2.);
- tk1 = h * (dy[i] + (tm0/2.));
- tm1 = h * ydopri(xn,yn,dyn,iflag);
- yn = y[i] + (tk1/2.);
- dyn = dy[i] + (tm1/2.);
- tk2 = h * (dy[i] + (tm1/2.));
- tm2 = h * ydopri(xn,yn,dyn,iflag);
- xn = x[i] + h;
- yn = y[i] + tk2;
- dyn = dy[i] + tm2;
- tk3 = h * (dy[i] + tm2);
- tm3 = h * ydopri(xn,yn,dyn,iflag);
- y[i+1] = y[i] + (tk0 + 2.*tk1+ 2.*tk2 + tk3)/6.;
- dy[i+1] = dy[i] + (tm0+ 2.*tm1 + 2.*tm2 + tm3)/6.;
- }
- }