home *** CD-ROM | disk | FTP | other *** search
- PROGRAM d10r4(input,output);
- (* driver for routine DBRENT *)
- CONST
- tol=1.0e-6;
- eql=1.0e-4;
- VAR
- ax,bx,cx,fa,fb,fc,xmin,dbr : real;
- i,iflag,j,nmin : integer;
- amin : ARRAY [1..20] OF real;
-
- (*$I MODFILE.PAS *)
- (*$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 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,func(xmin):12:6,
- dfunc(xmin):12:6,dbr:12:6)
- END
- END
- END
- END.
-