home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / C-SSP.ARJ / DETOMA.C < prev    next >
Encoding:
Text File  |  1984-08-07  |  1.3 KB  |  40 lines

  1.    detoma(iter,h,x,y,dy,ddy,iflag,d)
  2.  
  3.       /* subroutine to solve third-order ordinary differential    */
  4.       /* equations y''' = f(x,y,y',y'') by modified Adams' method.*/
  5.  
  6.       int iflag,iter;
  7.       float d[],dy[],ddy[],h,x[],y[];
  8.  
  9.    {
  10.       int i,lda;
  11.       float ddyi,dyi,u1,u2,u3,u4,yi;
  12.       double ytrpri();
  13.  
  14.       d[0] = 0.;
  15.       d[1] = 0.;
  16.       d[2] = 0.;
  17.       lda = 4;
  18.       detork(lda,h,x,y,dy,ddy,iflag);
  19.       u1 = ytrpri(x[0],y[0],dy[0],ddy[0],iflag);
  20.       u2 = ytrpri(x[1],y[1],dy[1],ddy[1],iflag);
  21.       u3 = ytrpri(x[2],y[2],dy[2],ddy[2],iflag);
  22.       u4 = ytrpri(x[3],y[3],dy[3],ddy[3],iflag);
  23.  
  24.       for(i = 3; i <= iter-2; i++)
  25.       {
  26.        ddyi = ddy[i]+h*(55.*u4-59.*u3+37.*u2-9.*u1)/24.;
  27.        dyi = dy[i]+h*(55.*ddy[i]-59.*ddy[i-1]+37.*ddy[i-2]-9.*ddy[i-3])/24.;
  28.        yi = y[i]+h*(55.*dy[i]-59.*dy[i-1]+37.*dy[i-2]-9.*dy[i-3])/24.;
  29.        u1 = u2;
  30.        u2 = u3;
  31.        u3 = u4;
  32.        u4 = ytrpri(x[i+1],yi,dyi,ddyi,iflag);
  33.        ddy[i+1] = ddy[i]+h*(9.*u4+19.*u3-5.*u2+u1)/24.;
  34.        dy[i+1] = dy[i]+h*(9.*ddy[i+1]+19.*ddy[i]-5.*ddy[i-1]+ddy[i-2])/24.;
  35.        y[i+1] =y[i]+h*(9.*dy[i+1]+19.*dy[i]-5.*dy[i-1]+dy[i-2])/24.;
  36.        u4 = ytrpri(x[i+1],y[i+1],dy[i+1],ddy[i+1],iflag);
  37.        d[i+1] = -19.*(y[i+1]-yi)/270.;
  38.       }
  39.     }
  40.