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