-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdbrent.dem
37 lines (36 loc) · 854 Bytes
/
dbrent.dem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
PROGRAM D10R4
C Driver for routine DBRENT
PARAMETER(TOL=1.0E-6,EQL=1.E-4)
EXTERNAL BESSJ0,DERIV
DIMENSION AMIN(20)
NMIN=0
WRITE(*,'(/1X,A)') 'Minima of the function BESSJ0'
WRITE(*,'(/1X,T6,A,T19,A,T27,A,T39,A,T53,A/)') 'Min. #','X',
* 'BESSJ0(X)','BESSJ1(X)','DBRENT'
DO 12 I=1,100
AX=I
BX=I+1.0
CALL MNBRAK(AX,BX,CX,FA,FB,FC,BESSJ0)
DBR=DBRENT(AX,BX,CX,BESSJ0,DERIV,TOL,XMIN)
IF (NMIN.EQ.0) THEN
AMIN(1)=XMIN
NMIN=1
WRITE(*,'(1X,5X,I2,3X,4F12.6)') NMIN,XMIN,
* BESSJ0(XMIN),DERIV(XMIN),DBR
ELSE
IFLAG=0
DO 11 J=1,NMIN
IF (ABS(XMIN-AMIN(J)).LE.EQL*XMIN) IFLAG=1
11 CONTINUE
IF (IFLAG.EQ.0) THEN
NMIN=NMIN+1
AMIN(NMIN)=XMIN
WRITE(*,'(1X,5X,I2,3X,4F12.6)') NMIN,XMIN,
* BESSJ0(XMIN),DERIV(XMIN),DBR
ENDIF
ENDIF
12 CONTINUE
END
FUNCTION DERIV(X)
DERIV=-BESSJ1(X)
END