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