home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d15r4(input,output);
- (* driver for ODEINT *)
- CONST
- n=4;
- TYPE
- glnarray = ARRAY [1..n] OF real;
- glarray = glnarray;
- VAR
- dxsav,eps,h1,hmin,x1,x2 : real;
- i,kmax,kount,nbad,nok : integer;
- ystart : glnarray;
- xp : ARRAY [1..200] OF real;
- yp : ARRAY [1..10,1..200] OF real;
-
- (*$I MODFILE.PAS *)
- (*$I BESSJ0.PAS *)
-
- (*$I BESSJ1.PAS *)
-
- (*$I BESSJ.PAS *)
-
- PROCEDURE derivs(x: real; y: glnarray; VAR dydx: glnarray);
- (* Programs using routine DERIVS must define the type
- TYPE
- glnarray = ARRAY [1..4] OF real;
- in the calling routine. *)
- BEGIN
- dydx[1] := -y[2];
- dydx[2] := y[1]-(1.0/x)*y[2];
- dydx[3] := y[2]-(2.0/x)*y[3];
- dydx[4] := y[3]-(3.0/x)*y[4]
- END;
-
- (*$I RK4.PAS *)
-
- (*$I RKQC.PAS *)
-
- (*$I ODEINT.PAS *)
-
- BEGIN
- x1 := 1.0;
- x2 := 10.0;
- ystart[1] := bessj0(x1);
- ystart[2] := bessj1(x1);
- ystart[3] := bessj(2,x1);
- ystart[4] := bessj(3,x1);
- eps := 1.0e-4;
- h1 := 0.1;
- hmin := 0.0;
- kmax := 100;
- dxsav := (x2-x1)/20.0;
- odeint(ystart,n,x1,x2,eps,h1,hmin,nok,nbad);
- writeln;
- writeln('successful steps:',' ':13,nok:3);
- writeln('bad steps:',' ':20,nbad:3);
- writeln('stored intermediate values:',' ',kount:3);
- writeln;
- writeln('x':8,'integral':18,'bessj(3,x)':15);
- FOR i := 1 to kount DO BEGIN
- writeln(xp[i]:10:4,yp[4,i]:16:6,bessj(3,xp[i]):14:6)
- END
- END.
-