PROGRAM d10r4(input,output); (* driver for routine DBRENT *) (*$I MODFILE.PAS *) CONST tol = 1.0e-6; eql = 1.0e-4; TYPE RealArray20 = ARRAY [1..20] OF real; VAR ax,bx,cx,fa,fb,fc,xmin,dbr: real; i,iflag,j,nmin: integer; amin: RealArray20; (*$I BESSJ1.PAS *) FUNCTION dfunc(x: real): real; BEGIN dfunc := -bessj1(x) END; (*$I BESSJ0.PAS *) FUNCTION func(x: real): real; BEGIN func := bessj0(x) END; (*$I MNBRAK.PAS *) (*$I DBRENT.PAS *) BEGIN nmin := 0; writeln; writeln('minima of the function bessj0'); writeln('min. #':10,'x':8, 'bessj0(x)':16,'bessj1(x)':12,'DBRENT':11); FOR i := 1 TO 100 DO BEGIN ax := i; bx := i+1.0; mnbrak(ax,bx,cx,fa,fb,fc); dbr := dbrent(ax,bx,cx,tol,xmin); IF nmin = 0 THEN BEGIN amin[1] := xmin; nmin := 1; writeln(nmin:7,xmin:15:6,func(xmin):12:6, dfunc(xmin):12:6,dbr:12:6); END ELSE BEGIN iflag := 0; FOR j := 1 TO nmin DO IF abs(xmin-amin[j]) <= eql*xmin THEN iflag := 1; IF iflag = 0 THEN BEGIN nmin := nmin+1; amin[nmin] := xmin; writeln(nmin:7,xmin:15:6,func(xmin):12:6, dfunc(xmin):12:6,dbr:12:6) END END END END.