home *** CD-ROM | disk | FTP | other *** search
- desoma(iter,h,x,y,dy,iflag,d)
-
- /* subroutine to solve second-order ordinary differential */
- /* equations y" = f(x,y,y') by Modified adams' method. */
-
- int iflag,iter;
- float d[],dy[],h,x[],y[];
-
- {
- int i,lda;
- float dyi,u1,u2,u3,u4,yi;
- double ydopri();
-
- d[0] = 0.;
- d[1] = 0.;
- d[2] = 0.;
- lda = 4;
- desork(lda,h,x,y,dy,iflag);
- u1 = ydopri(x[0],y[0],dy[0],iflag);
- u2 = ydopri(x[1],y[1],dy[1],iflag);
- u3 = ydopri(x[2],y[2],dy[2],iflag);
- u4 = ydopri(x[3],y[3],dy[3],iflag);
-
- for(i = 3; i <= iter-2; i++)
- {
- dyi = dy[i] +h * (55.*u4-59. * u3+37. * u2-9. * u1)/24.;
- yi = y[i] +h*(55.*dy[i]-59.*dy[i-1]+37.*dy[i-2]-9.*dy[i-3])/24.;
- u1 = u2;
- u2 = u3;
- u3 = u4;
- u4 = ydopri(x[i+1],yi,dyi,iflag);
- dy[i+1] = dy[i] +h*(9.*u4+19.*u3-5.*u2+u1)/24.;
- y[i+1] = y[i]+h*(9.*dy[i+1] +19.*dy[i]-5.*dy[i-1]+dy[i-2])/24.;
- u4 = ydopri(x[i+1],y[i+1],dy[i+1],iflag);
- d[i+1] = -19. * (y[i+1]-yi) / 270.;
- }
- }