home *** CD-ROM | disk | FTP | other *** search
- defoha(iter,h,x,y,dy,iflag,err)
-
- /* subroutine to solve first-order ordinary differential */
- /* equations y' = f(x,y) by Hamming's method. */
-
- int iflag,iter;
- float dy[],err[],h,x[],y[];
-
- {
- int n,lda;
- float cnpi,pmc,pmni,pnpi,pmpi,pmnpi,xn,yn;
- double yprime();
-
- err[0] = 0.;
- err[1] = 0.;
- err[2] = 0.;
- err[3] = 0.;
- lda = 4;
- defork(lda,h,x,y,dy,iflag);
- pmc = 0.0;
- for(n = 3; n <= iter-2; n++)
- {
- pnpi = y[n-3]+(4./3.)*h*(2.*dy[n]-dy[n-1]+2.*dy[n-2]);
- pmni = pnpi-(112./121.) * pmc;
- xn = x[n+1];
- pmnpi = yprime(xn,pmni,iflag);
- cnpi = (1./8.)*(9.*y[n]-y[n-2]+3.*h*(pmnpi+2.*dy[n]-dy[n-1]));
- y[n+1] = cnpi + (9./121.) * (pnpi-cnpi);
- xn = x[n+1];
- yn = y[n+1];
- dy[n+1] = yprime(xn,yn,iflag);
- pmc = pnpi-cnpi;
- err[n+1] = cnpi-pnpi;
- }
- }
-