C ALGORITHM 748, COLLECTED ALGORITHMS FROM ACM. C THIS WORK PUBLISHED IN TRANSACTIONS ON MATHEMATICAL SOFTWARE, C VOL. 21, NO. 3, September, 1995, P. 327-344. C C This file contains 5 files separated by lines of the form C C*** filename C C The filenames in this file are: C C driver.f enclofx.f exdrive.f C testdata testout C C*** driver.f C TEST PROBLEM SET ATTACHED TO THE ALGORITHM "ENCLOFX" C WITH THE COMPANION PAPER "ENCLOSING ZEROS OF CONTINUOUS C FUNCTIONS" BY C G.E.ALEFELD, F.A.POTRA, AND YIXUN SHI. C C THE FOLLOWING RUNS THE SET OF TEST PROBLEMS LISTED IN THE C COMPANION PAPER. THE RESULT OF THE TEST RUN IS ALSO LISTED C IN THAT PAPER. C C ****************************************************************** INTEGER NPROB,NEPS,ISIGN INTEGER N DOUBLE PRECISION A,B,EPS,ROOT EXTERNAL ISIGN COMMON /USER/ N C THIS PROGRAM CALCULATES A ROOT OF A CONTINUOUS FUNCTION F(X) C IN AN INTERVAL I=[A, B] PROVIDED THAT F(A)F(B)<0. THE FUNCTION F(X) C AND THE INITIAL INTERVAL [A, B] ARE TO BE SUPPLIED BY THE USER IN C THE SUBROUTINES "FUNC" AND "INIT". THE OUTPUT "ROOT" EITHER SATISFIES C THAT F(ROOT)=0 OR IS AN APPROXIMATE SOLUTION OF THE EQUATION F(X)=0 C SUCH THAT "ROOT" IS INCLUDED IN AN INTERVAL [AC, BC] WITH C F(AC)F(BC)<0, C AND C BC-AC <= TOL = 2*TOLE(AC,BC). C PRECISION CHOSEN AS THE RELATIVE MACHINE PRECISION, C AND "UC" IS EQUAL TO EITHER "AC" OR "BC" WITH THE CONDITION C |F(UC)| = MIN{ |F(AC)|, |F(BC)| }. C C INPUT OF THE PROGRAM: C NPROB -- INTEGER. POSITIVE INTEGER STANDING FOR "NUMBER OF PROBLEM", C INDICATING THE PROBLEM TO BE SOLVED. C N -- PROBLEM DEPENDENT PARAMETER C OUTPUT OF THE PROGRAM: C ROOT -- DOUBLE PRECISION. EXACT OR APPROXIMATE SOLUTION OF THE C EQUATION F(X)=0. 10 READ(*,*,END=20) NPROB, N C C USE MACHINE PRECISION C CALL RMP(EPS) NEPS = 1000 C C CALL SUBROUTINE "INIT" TO GET THE INITIAL INTERVAL. C CALL INIT(NPROB, A, B) C C CALL SUBROUTINE "RROOT" TO HAVE THE PROBLEM SOLVED. C CALL RROOT(NPROB,NEPS,EPS,A,B,ROOT) CONTINUE C C PRINT OUT THE RESULT ON THE SCREEN. C PRINT*, 'PROBLEM NUMBER ', NPROB, + ' WITH PROBLEM PARAMETER ', N PRINT*, 'COMPUTED ROOT =', ROOT PRINT*, ' ' GOTO 10 20 STOP END SUBROUTINE INIT(NPROB, A, B) INTEGER NPROB DOUBLE PRECISION A,B,PI PI=3.1416D0 GOTO (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), NPROB 1 A=PI/2.0D0 B=PI RETURN 2 A=1.0D0+1.0D-9 B=(2.0D0)*(2.0D0)-1.0D-9 RETURN 3 A=(2.0D0)*(2.0D0)+1.0D-9 B=(3.0D0)*(3.0D0)-1.0D-9 RETURN 4 A=(3.0D0)*(3.0D0)+1.0D-9 B=(4.0D0)*(4.0D0)-1.0D-9 RETURN 5 A=(4.0D0)*(4.0D0)+1.0D-9 B=(5.0D0)*(5.0D0)-1.0D-9 RETURN 6 A=(5.0D0)*(5.0D0)+1.0D-9 B=(6.0D0)*(6.0D0)-1.0D-9 RETURN 7 A=(6.0D0)*(6.0D0)+1.0D-9 B=(7.0D0)*(7.0D0)-1.0D-9 RETURN 8 A=(7.0D0)*(7.0D0)+1.0D-9 B=(8.0D0)*(8.0D0)-1.0D-9 RETURN 9 A=(8.0D0)*(8.0D0)+1.0D-9 B=(9.0D0)*(9.0D0)-1.0D-9 RETURN 10 A=(9.0D0)*(9.0D0)+1.0D-9 B=(10.0D0)*(10.0D0)-1.0D-9 RETURN 11 A=(10.0D0)*(10.0D0)+1.0D-9 B=(11.0D0)*(11.0D0)-1.0D-9 RETURN 12 CONTINUE 13 CONTINUE 14 A=-9.0D0 B=31.0D0 RETURN 15 CONTINUE 16 A=0.0D0 B=5.0D0 RETURN 17 A=-0.95D0 B=4.05D0 RETURN 18 A=0.0D0 B=1.5D0 RETURN 19 CONTINUE 20 CONTINUE 21 CONTINUE 22 CONTINUE 23 A=0.0D0 B=1.0D0 RETURN 24 A=1.0D-2 B=1.0D0 RETURN 25 A=1.0D0 B=100.0D0 RETURN 26 A=-1.0D0 B=4.0D0 RETURN 27 A=-10000 B=PI/2.0D0 RETURN 28 A=-10000 B=1.0D-4 RETURN END C ***************** SUBROUTINE FUNC(NPROB, X, FX) INTEGER NPROB, N,I DOUBLE PRECISION X, FX, DN, DFLOAT, DI COMMON /USER/ N C N --- AN INTEGER USED IN THE FUNCTION. C DN=DFLOAT(N) GOTO (10,20,30,40,50,60,70,80,90,100,110,120,130,140,150, * 160,170,180,190,200,210,220,230,240,250,260, * 270,280), NPROB 10 FX=DSIN(X)-X/2.0D0 RETURN 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE 60 CONTINUE 70 CONTINUE 80 CONTINUE 90 CONTINUE 100 CONTINUE 110 CONTINUE FX=0.0D0 DO 115 I=1,20 DI=DFLOAT(I) FX=FX+((2.0D0*DI-5.0D0)**2)/(X-DI*DI)**3 115 CONTINUE FX=-2.0D0*FX RETURN 120 FX=-40.0D0*X*DEXP(-1.0D0*X) RETURN 130 FX=-100.0D0*X*DEXP(-2.0D0*X) RETURN 140 FX=-200.0D0*X*DEXP(-3.0D0*X) RETURN 150 FX=X**N-0.2D0 RETURN 160 CONTINUE 170 FX=X**N-1.0D0 RETURN 180 FX=DSIN(X)-0.5D0 RETURN 190 FX=2.0D0*X*DEXP(-DN)-2.0D0*DEXP(-DN*X)+1.0D0 RETURN 200 FX=(1.0D0+(1.0D0-DN)**2)*X - (1.0D0-DN*X)**2 RETURN 210 FX=X**2-(1.0D0-X)**N RETURN 220 FX=(1.0D0+(1.0D0-DN)**4)*X - (1.0D0-DN*X)**4 RETURN 230 FX=(X-1.0D0)*DEXP(-DN*X)+X**N RETURN 240 FX=(DN*X-1.0D0)/((DN-1.0D0)*X) RETURN 250 FX=X**(1.0D0/DN)-DN**(1.0D0/DN) RETURN 260 CONTINUE IF(X .EQ. 0.0D0)THEN FX=0.0D0 ELSE FX=X/DEXP(1.0D0/(X*X)) ENDIF RETURN 270 CONTINUE IF(X .GE. 0.0D0)THEN FX=(X/1.5D0 + DSIN(X) -1.0D0)*DN/20.0D0 ELSE FX=(-1.0D0*DN)/20.0D0 ENDIF RETURN 280 CONTINUE IF(X .GE. (1.0D-3)*2.0D0/(DN+1.0D0)) THEN FX=DEXP(1.0D0)-1.859D0 ELSEIF (X .GE. 0.0D0)THEN FX=DEXP((DN+1.0D0)*0.5D0*X*1.0D3)-1.859D0 ELSE FX=-0.859D0 ENDIF RETURN END C*** enclofx.f SUBROUTINE RROOT(NPROB,NEPS,EPS,A,B,ROOT) C FINDS EITHER AN EXACT SOLUTION OR AN APPROXIMATE SOLUTION OF THE C EQUATION F(X)=0 IN THE INTERVAL [A,B]. AT THE BEGINING OF EACH C ITERATION, THE CURRENT ENCLOSING INTERVAL IS RECORDED AS [A0,B0]. C THE FIRST ITERATION IS SIMPLY A SECANT STEP. STARTING WITH THE C SECOND ITERATION, THREE STEPS ARE TAKEN IN EACH ITERATION. FIRST C TWO STEPS ARE EITHER QUADRATIC INTERPOLATION OR CUBIC INVERSE C INTERPOLATION. THE THIRD STEP IS A DOUBLE-SIZE SECANT STEP. IF THE C DIAMETER OF THE ENCLOSING INTERVAL OBTAINED AFTER THOSE THREE STEPS C IS LARGER THAN 0.5*(B0-A0), THEN AN ADDITIONAL BISECTION STEP WILL C BE TAKEN. C NPROB -- INTEGER. INDICATING THE PROBLEM TO BE SOLVED; C NEPS -- INTEGER. USED TO DETERMINE THE TERMINATION CRITERION; C EPS -- DOUBLE PRECISION. USED IN THE TERMINATION CRITERION; C A,B -- DOUBLE PRECISION. INPUT AS THE INITIAL INTERVAL AND C OUTPUT AS THE ENCLOSING INTERVAL AT THE TERMINATION; C ROOT -- DOUBLE PRECISION. OUTPUT SOLUTION OF THE EQUATION. INTEGER NPROB,ITNUM,ISIGN,NEPS DOUBLE PRECISION A,B,FA,FB,C,U,FU,MU,A0,B0,TOL,D,FD DOUBLE PRECISION PROF,E,FE,EPS,ROOT EXTERNAL ISIGN PARAMETER (MU=0.5D0) C C INITIALIZATION. SET THE NUMBER OF ITERATION AS 0. CALL SUBROUTINE C "FUNC" TO OBTAIN THE INITIAL FUNCTION VALUES F(A) AND F(B). SET C DUMB VALUES FOR THE VARIABLES "E" AND "FE". C ITNUM=0 CALL FUNC(NPROB,A,FA) CALL FUNC(NPROB,B,FB) E=1.0D5 FE=1.0D5 C C ITERATION STARTS. THE ENCLOSING INTERVAL BEFORE EXECUTING THE C ITERATION IS RECORDED AS [A0, B0]. C 10 A0=A B0=B C C UPDATES THE NUMBER OF ITERATION. C ITNUM=ITNUM+1 C C CALCULATES THE TERMINATION CRITERION. STOPS THE PROCEDURE IF THE C CRITERION IS SATISFIED. C IF(DABS(FB) .LE. DABS(FA)) THEN CALL TOLE(B,TOL,NEPS,EPS) ELSE CALL TOLE(A,TOL,NEPS,EPS) ENDIF IF((B-A).LE.TOL)GOTO 400 C C FOR THE FIRST ITERATION, SECANT STEP IS TAKEN. C IF(ITNUM .EQ. 1)THEN C=A-(FA/(FB-FA))*(B-A) C C CALL SUBROUTINE "BRACKT" TO GET A SHRINKED ENCLOSING INTERVAL AS C WELL AS TO UPDATE THE TERMINATION CRITERION. STOP THE PROCEDURE C IF THE CRITERION IS SATISFIED OR THE EXACT SOLUTION IS OBTAINED. C CALL BRACKT(NPROB,A,B,C,FA,FB,TOL,NEPS,EPS,D,FD) IF((FA.EQ.0.0D0).OR.((B-A).LE.TOL))GOTO 400 GOTO 10 ENDIF C C STARTING WITH THE SECOND ITERATION, IN THE FIRST TWO STEPS, EITHER C QUADRATIC INTERPOLATION IS USED BY CALLING THE SUBROUTINE "NEWQUA" C OR THE CUBIC INVERSE INTERPOLATION IS USED BY CALLING THE SUBROUTINE C "PZERO". IN THE FOLLOWING, IF "PROF" IS NOT EQUAL TO 0, THEN THE C FOUR FUNCTION VALUES "FA", "FB", "FD", AND "FE" ARE DISTINCT, AND C HENCE "PZERO" WILL BE CALLED. C PROF=(FA-FB)*(FA-FD)*(FA-FE)*(FB-FD)*(FB-FE)*(FD-FE) IF((ITNUM .EQ. 2) .OR. (PROF .EQ. 0.0D0)) THEN CALL NEWQUA(A,B,D,FA,FB,FD,C,2) ELSE CALL PZERO(A,B,D,E,FA,FB,FD,FE,C) IF((C-A)*(C-B) .GE. 0.0D0)THEN CALL NEWQUA(A,B,D,FA,FB,FD,C,2) ENDIF ENDIF E=D FE=FD C C CALL SUBROUTINE "BRACKT" TO GET A SHRINKED ENCLOSING INTERVAL AS C WELL AS TO UPDATE THE TERMINATION CRITERION. STOP THE PROCEDURE C IF THE CRITERION IS SATISFIED OR THE EXACT SOLUTION IS OBTAINED. C CALL BRACKT(NPROB,A,B,C,FA,FB,TOL,NEPS,EPS,D,FD) IF((FA.EQ.0.0D0).OR.((B-A).LE.TOL))GOTO 400 PROF=(FA-FB)*(FA-FD)*(FA-FE)*(FB-FD)*(FB-FE)*(FD-FE) IF(PROF .EQ. 0.0D0) THEN CALL NEWQUA(A,B,D,FA,FB,FD,C,3) ELSE CALL PZERO(A,B,D,E,FA,FB,FD,FE,C) IF((C-A)*(C-B) .GE. 0.0D0)THEN CALL NEWQUA(A,B,D,FA,FB,FD,C,3) ENDIF ENDIF C C CALL SUBROUTINE "BRACKT" TO GET A SHRINKED ENCLOSING INTERVAL AS C WELL AS TO UPDATE THE TERMINATION CRITERION. STOP THE PROCEDURE C IF THE CRITERION IS SATISFIED OR THE EXACT SOLUTION IS OBTAINED. C CALL BRACKT(NPROB,A,B,C,FA,FB,TOL,NEPS,EPS,D,FD) IF((FA.EQ.0.0D0).OR.((B-A).LE.TOL))GOTO 400 E=D FE=FD C C TAKES THE DOUBLE-SIZE SECANT STEP. C IF (DABS(FA) .LT. DABS(FB))THEN U=A FU=FA ELSE U=B FU=FB ENDIF C=U-2.0D0*(FU/(FB-FA))*(B-A) IF(DABS(C-U) .GT. (0.5D0*(B-A)))THEN C=A+0.5D0*(B-A) ENDIF C C CALL SUBROUTINE "BRACKT" TO GET A SHRINKED ENCLOSING INTERVAL AS C WELL AS TO UPDATE THE TERMINATION CRITERION. STOP THE PROCEDURE C IF THE CRITERION IS SATISFIED OR THE EXACT SOLUTION IS OBTAINED. C CALL BRACKT(NPROB,A,B,C,FA,FB,TOL,NEPS,EPS,D,FD) IF((FA.EQ.0.0D0).OR.((B-A).LE.TOL))GOTO 400 C C DETERMINES WHETHER AN ADDITIONAL BISECTION STEP IS NEEDED. AND TAKES C IT IF NECESSARY. C IF((B-A) .LT. (MU*(B0-A0)))THEN GOTO 10 ENDIF E=D FE=FD C C CALL SUBROUTINE "BRACKT" TO GET A SHRINKED ENCLOSING INTERVAL AS C WELL AS TO UPDATE THE TERMINATION CRITERION. STOP THE PROCEDURE C IF THE CRITERION IS SATISFIED OR THE EXACT SOLUTION IS OBTAINED. C CALL BRACKT(NPROB,A,B,A+0.5D0*(B-A),FA,FB,TOL,NEPS,EPS,D,FD) IF((FA .EQ. 0.0D0).OR.((B-A).LE.TOL))GOTO 400 GOTO 10 C C TERMINATES THE PROCEDURE AND RETURN THE "ROOT". C 400 CONTINUE ROOT=A RETURN END SUBROUTINE BRACKT(NPROB,A,B,C,FA,FB,TOL,NEPS,EPS,D,FD) C GIVEN CURRENT ENCLOSING INTERVAL [A,B] AND A NUMBER C IN (A,B), IF C F(C)=0 THEN SETS THE OUTPUT A=C. OTHERWISE DETERMINES THE NEW C ENCLOSING INTERVAL: [A,B]=[A,C] OR [A,B]=[C,B]. ALSO UPDATES THE C TERMINATION CRITERION CORRESPONDING TO THE NEW ENCLOSING INTERVAL. C NPROB -- INTEGER. INDICATING THE PROBLEM TO BE SOLVED; C A,B -- DOUBLE PRECISION. [A,B] IS INPUT AS THE CURRENT C ENCLOSING INTERVAL AND OUTPUT AS THE SHRINKED NEW C ENCLOSING INTERVAL; C C -- DOUBLE PRECISION. USED TO DETERMINE THE NEW ENCLOSING C INTERVAL; C D -- DOUBLE PRECISION. OUTPUT: IF THE NEW ENCLOSING INTERVAL C IS [A,C] THEN D=B, OTHERWISE D=A; C FA,FB,FD-- DOUBLE PRECISION. FA=F(A), FB=F(B), AND FD=F(D); C TOL -- DOUBLE PRECISION. INPUT AS THE CURRENT TERMINATION C CRITERION AND OUTPUT AS THE UPDATED TERMINATION C CRITERION ACCORDING TO THE NEW ENCLOSING INTERVAL; C NEPS -- INTEGER. USED TO DETERMINE THE TERMINATION CRITERION; C EPS -- DOUBLE PRECISION. USED IN THE TERMINATION CRITERION. INTEGER NPROB,ISIGN,NEPS DOUBLE PRECISION A,B,C,FA,FB,FC,D,FD,TOL,EPS EXTERNAL ISIGN C C ADJUST C IF (B-A) IS VERY SMALL OR IF C IS VERY CLOSE TO A OR B. C TOL=0.7D0*TOL IF((B-A) .LE. 2.0D0*TOL)THEN C=A+0.5D0*(B-A) ELSEIF(C .LE. A+TOL)THEN C=A+TOL ELSE IF(C .GE. B-TOL)THEN C=B-TOL ENDIF ENDIF C C CALL SUBROUTINE "FUNC" TO OBTAIN F(C) C CALL FUNC(NPROB, C, FC) C C IF F(C)=0, THEN SET A=C AND RETURN. THIS WILL TERMINATE THE C PROCEDURE IN SUBROUTINE "RROOT" AND GIVE THE EXACT SOLUTION OF C THE EQUATION F(X)=0. C IF(FC .EQ. 0.0D0)THEN A=C FA=0.0D0 D=0.0D0 FD=0.0D0 RETURN ENDIF C C IF F(C) IS NOT ZERO, THEN DETERMINE THE NEW ENCLOSING INTERVAL. C IF((ISIGN(FA)*ISIGN(FC)) .LT. 0)THEN D=B FD=FB B=C FB=FC ELSE D=A FD=FA A=C FA=FC ENDIF C C UPDATE THE TERMINATION CRITERION ACCORDING TO THE NEW ENCLOSING C INTERVAL. C IF(DABS(FB) .LE. DABS(FA)) THEN CALL TOLE(B,TOL,NEPS,EPS) ELSE CALL TOLE(A,TOL,NEPS,EPS) ENDIF C C END OF THE SUBROUTINE. C RETURN END INTEGER FUNCTION ISIGN(X) C INDICATES THE SIGN OF THE VARIABLE "X". C X -- DOUBLE PRECISION. C ISIGN -- INTEGER. DOUBLE PRECISION X IF(X .GT. 0.0D0)THEN ISIGN=1 ELSEIF(X .EQ. 0.0D0)THEN ISIGN=0 ELSE ISIGN=-1 ENDIF RETURN END SUBROUTINE TOLE(B,TOL,NEPS,EPS) C DETERMINES THE TERMINATION CRITERION. C B -- DOUBLE PRECISION. C NEPS -- INTEGER. C EPS -- DOUBLE PRECISION. C TOL -- DOUBLE PRECISION. OUTPUT AS THE TERMINATION CRITERION. C TOL =2*(2*EPS*|B| + 10D-{NEPS}), IF NEPS IS NOT 1000; C AND TOL =2*(2*EPS*|B|), IF NEPS = 1000. INTEGER NEPS,I DOUBLE PRECISION B,TOL,EPS IF(NEPS .EQ. 1000)THEN TOL=0.0D0 ELSE TOL=1.0D0 DO 10 I=1,NEPS TOL=TOL/10.0D0 10 CONTINUE ENDIF TOL=TOL+2.0D0*DABS(B)*EPS TOL=2.0D0*TOL RETURN END SUBROUTINE NEWQUA(A,B,D,FA,FB,FD,C,K) C USES K NEWTON STEPS TO APPROXIMATE THE ZERO IN (A,B) OF THE C QUADRATIC POLYNOMIAL INTERPOLATING F(X) AT A, B, AND D. SAFEGUARD C IS USED TO AVOID OVERFLOW. C A,B,D,FA,FB,FD -- DOUBLE PRECISION. D LIES OUTSIDE THE INTERVAL C [A,B]. FA=F(A), FB=F(B), AND FD=F(D). F(A)F(B)<0. C C -- DOUBLE PRECISION. OUTPUT AS THE APPROXIMATE ZERO C IN (A,B) OF THE QUADRATIC POLYNOMIAL. C K -- INTEGER. INPUT INDICATING THE NUMBER OF NEWTON C STEPS TO TAKE. INTEGER K,IERROR,ISIGN,I DOUBLE PRECISION A,B,D,FA,FB,FD,C,A0,A1,A2,PC,PDC EXTERNAL ISIGN C C INITIALIZATION. FIND THE COEFFICIENTS OF THE QUADRATIC POLYNOMIAL. C IERROR=0 A0=FA A1=(FB-FA)/(B-A) A2=((FD-FB)/(D-B)-A1)/(D-A) C C SAFEGUARD TO AVOID OVERFLOW. C 10 IF((A2 .EQ. 0.0D0).OR.(IERROR .EQ. 1))THEN C=A-A0/A1 RETURN ENDIF C C DETERMINE THE STARTING POINT OF NEWTON STEPS. C IF(ISIGN(A2)*ISIGN(FA) .GT. 0)THEN C=A ELSE C=B ENDIF C C START THE SAFEGUARDED NEWTON STEPS. C DO 20 I=1,K IF(IERROR .EQ. 0)THEN PC=A0+(A1+A2*(C-B))*(C-A) PDC=A1+A2*((2.0D0*C)-(A+B)) IF(PDC .EQ. 0.0D0)THEN IERROR=1 ELSE C=C-PC/PDC ENDIF ENDIF 20 CONTINUE IF(IERROR .EQ. 1)GOTO 10 RETURN END SUBROUTINE PZERO(A,B,D,E,FA,FB,FD,FE,C) C USES CUBIC INVERSE INTERPOLATION OF F(X) AT A, B, D, AND E TO C GET AN APPROXIMATE ROOT OF F(X). THIS PROCEDURE IS A SLIGHT C MODIFICATION OF AITKEN-NEVILLE ALGORITHM FOR INTERPOLATION C DESCRIBED BY STOER AND BULIRSCH IN "INTRO. TO NUMERICAL ANALYSIS" C SPRINGER-VERLAG. NEW YORK (1980). C A,B,D,E,FA,FB,FD,FE -- DOUBLE PRECISION. D AND E LIE OUTSIDE C THE INTERVAL [A,B]. FA=F(A), FB=F(B), C FD=F(D), AND FE=F(E). C C -- DOUBLE PRECISION. OUTPUT OF THE SUBROUTINE. DOUBLE PRECISION A,B,D,E,FA,FB,FD,FE,C,Q11,Q21,Q31,D21,D31 DOUBLE PRECISION Q22,Q32,D32,Q33 C Q11=(D-E)*FD/(FE-FD) Q21=(B-D)*FB/(FD-FB) Q31=(A-B)*FA/(FB-FA) D21=(B-D)*FD/(FD-FB) D31=(A-B)*FB/(FB-FA) Q22=(D21-Q11)*FB/(FE-FB) Q32=(D31-Q21)*FA/(FD-FA) D32=(D31-Q21)*FD/(FD-FA) Q33=(D32-Q22)*FA/(FE-FA) C C CALCULATE THE OUTPUT C. C C=Q31+Q32+Q33 C=A+C RETURN END SUBROUTINE RMP(REL) C CALCULATES THE RELATIVE MACHINE PRECISION (RMP). C REL -- DOUBLE PRECISION. OUTPUT OF RMP. C DOUBLE PRECISION REL,BETA,A,B BETA=2.0D0 A=1.0D0 10 B=1.0D0+A IF(B .GT. 1.0D0)THEN A=A/BETA GOTO 10 ENDIF REL=A*BETA RETURN END C*** exdrive.f C ALGORITHM ENCLOFX C C G.E.ALEFELD, F.A.POTRA, AND YIXUN SHI --- JULY, 1994 C C COMPANION PAPER: ENCLOSING ZEROS OF CONTINUOUS FUNCTIONS C C THIS IMPLEMENTS THE ALGORITHM 4.2 OF THE COMPANION PAPER. C C FORTRAN/77 PROGRAM. C BUILT-IN FORTRAN/77 FUNCTION DABS(X) IS USED, WHERE C DABS(X)=|X| WITH DOUBLE PRECISION. C ****************************************************************** INTEGER NPROB,NEPS,ISIGN,INDI DOUBLE PRECISION A,B,EPS,ROOT EXTERNAL ISIGN C THIS PROGRAM CALCULATES A ROOT OF A CONTINUOUS FUNCTION F(X) C IN AN INTERVAL I=[A, B] PROVIDED THAT F(A)F(B)<0. THE FUNCTION F(X) C AND THE INITIAL INTERVAL [A, B] ARE TO BE SUPPLIED BY THE USER IN C THE SUBROUTINES "FUNC" AND "INIT". THE OUTPUT "ROOT" EITHER SATISFIES C THAT F(ROOT)=0 OR IS AN APPROXIMATE SOLUTION OF THE EQUATION F(X)=0 C SUCH THAT "ROOT" IS INCLUDED IN AN INTERVAL [AC, BC] WITH C F(AC)F(BC)<0, C AND C BC-AC <= TOL = 2*TOLE(AC,BC). C IN THE ABOVE TERMINATION CRITERION, C TOLE(AC,BC)=2*EPS*|UC|+10D-{NEPS}, IF "NEPS" IS NOT 1000, C AND C TOLE(AC,BC)=2*EPS*|UC|, IF "NEPS" IS SET AS 1000, C WHERE "NEPS" AND "EPS" ARE THE INPUTS OF THE PROGRAM DETERMINED BY C USER WITH "EPS" BEING LARGER THAN OR EQUAL TO THE RELATIVE MACHINE C PRECISION (IT IS USUALLY CHOSEN AS THE RELATIVE MACHINE PRECISION), C AND "UC" IS EQUAL TO EITHER "AC" OR "BC" WITH THE CONDITION C |F(UC)| = MIN{ |F(AC)|, |F(BC)| }. C C INPUT OF THE PROGRAM: C INDI -- INTEGER. INDICATES WHETHER THE USER WANTS TO USE THE C RELATIVE MACHINE PRECISION AS "EPS". IF INPUT 0, THEN C "EPS" WILL BE AUTOMATICALLY SET AS THE RELATIVE MACHINE C PRECISION, OTHERWISE THE USER WILL BE ASKED TO ENTER C "EPS"; C EPS -- DOUBLE PRECISION. USED IN TERMINATION CRITERION. LARGER C THAN OR EQUAL TO THE RELATIVE MACHINE PRECISION. IT IS C USUALLY CHOSEN AS THE RELATIVE MACHINE PRECISION; C NEPS -- INTEGER. POSITIVE INTEGER USED IN DETERMINING THE C TERMINATION CRITERION; C NPROB -- INTEGER. POSITIVE INTEGER STANDING FOR "NUMBER OF PROBLEM", C INDICATING THE PROBLEM TO BE SOLVED. C OUTPUT OF THE PROGRAM: C ROOT -- DOUBLE PRECISION. EXACT OR APPROXIMATE SOLUTION OF THE C EQUATION F(X)=0. C C INDICATE WHETHER TO USE THE RELATIVE MACHINE PRECISION AS "EPS" C OR TO ENTER A USER-CHOSEN "EPS". THE VALUE OF "EPS" SHOULD BE C LARGER THAN OR EQUAL TO THE RELATIVE MACHINE PRECISION. C PRINT*, 'ENTER 0 TO TAKE THE RELATIVE MACHINE PRECISION' PRINT*, 'AS "EPS", ENTER 1 TO TAKE OTHER VALUE FOR "EPS".' READ*, INDI IF (INDI .EQ. 0)THEN CALL RMP(EPS) ELSE PRINT*, 'ENTER EPS.' READ*, EPS ENDIF C C ENTER THE INPUTS "NEPS", AND "NPROB". C 10 PRINT*, 'ENTER NEPS.' READ*, NEPS 20 PRINT*, 'ENTER THE NUMBER OF PROBLEM.' READ*, NPROB C C CALL SUBROUTINE "INIT" TO GET THE INITIAL INTERVAL. C CALL INIT(NPROB, A, B) C C CALL SUBROUTINE "RROOT" TO HAVE THE PROBLEM SOLVED. C CALL RROOT(NPROB,NEPS,EPS,A,B,ROOT) CONTINUE C C PRINT OUT THE RESULT ON THE SCREEN. C PRINT*, 'THE NUMBER OF PROBLEM IS', NPROB PRINT*, 'THE ROOT IS', ROOT STOP END SUBROUTINE INIT(NPROB, A, B) C NPROB -- INTEGER. INDICATING THE NUMBER OF PROBLEM. C A, B -- DOUBLE PRECISION. GIVE THE INTERVAL [A,B]. INTEGER NPROB DOUBLE PRECISION A,B GOTO (10,20), NPROB 10 CONTINUE A=0.0D0 B=1.0D0 RETURN 20 CONTINUE A=1.0D0 B=100.0D0 RETURN END SUBROUTINE FUNC(NPROB, X, FX) C GIVE THE CONTINUOUS FUNCTION F(X) OF THE PROBLEM. C NPROB -- INTEGER. INDICATING THE NUMBER OF PROBLEM. C X, FX -- DOUBLE PRECISION. FX=F(X). INTEGER NPROB DOUBLE PRECISION X, FX GOTO (10,20), NPROB 10 CONTINUE FX=X**2-(1.0D0-X)**5 RETURN 20 CONTINUE FX=X**(1.0D0/5.0D0)-5.0D0**(1.0D0/5.0D0) RETURN END C*** testdata 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 4 15 6 15 8 15 10 15 12 16 4 16 6 16 8 16 10 16 12 17 8 17 10 17 12 17 14 18 1 19 1 19 2 19 3 19 4 19 5 19 20 19 40 19 60 19 80 19 100 20 5 20 10 20 20 21 2 21 5 21 10 21 15 21 20 22 1 22 2 22 4 22 5 22 8 22 15 22 20 23 1 23 5 23 10 23 15 23 20 24 2 24 5 24 15 24 20 25 2 25 3 25 4 25 5 25 6 25 7 25 9 25 11 25 13 25 15 25 17 25 19 25 21 25 23 25 25 25 27 25 29 25 31 25 33 26 1 27 1 27 2 27 3 27 4 27 5 27 6 27 7 27 8 27 9 27 10 27 11 27 12 27 13 27 14 27 15 27 16 27 17 27 18 27 19 27 20 27 21 27 22 27 23 27 24 27 25 27 26 27 27 27 28 27 29 27 30 27 31 27 32 27 33 27 34 27 35 27 36 27 37 27 38 27 39 27 40 28 20 28 21 28 22 28 23 28 24 28 25 28 26 28 27 28 28 28 29 28 30 28 31 28 32 28 33 28 34 28 35 28 36 28 37 28 38 28 39 28 40 28 100 28 200 28 300 28 400 28 500 28 600 28 700 28 800 28 900 28 1000 C*** testout PROBLEM NUMBER 1 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 1.8954942670340 PROBLEM NUMBER 2 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 3.0229153472731 PROBLEM NUMBER 3 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 6.6837535608081 PROBLEM NUMBER 4 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 11.238701655002 PROBLEM NUMBER 5 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 19.676000080623 PROBLEM NUMBER 6 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 29.828227326505 PROBLEM NUMBER 7 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 41.906116195289 PROBLEM NUMBER 8 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 55.953595800143 PROBLEM NUMBER 9 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 71.985665586588 PROBLEM NUMBER 10 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 90.008868539167 PROBLEM NUMBER 11 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 110.02653274833 PROBLEM NUMBER 12 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0. PROBLEM NUMBER 13 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0. PROBLEM NUMBER 14 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0. PROBLEM NUMBER 15 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 0.66874030497642 PROBLEM NUMBER 15 WITH PROBLEM PARAMETER 6 COMPUTED ROOT = 0.76472449133173 PROBLEM NUMBER 15 WITH PROBLEM PARAMETER 8 COMPUTED ROOT = 0.81776543395794 PROBLEM NUMBER 15 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 0.85133992252078 PROBLEM NUMBER 15 WITH PROBLEM PARAMETER 12 COMPUTED ROOT = 0.87448527222117 PROBLEM NUMBER 16 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 16 WITH PROBLEM PARAMETER 6 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 16 WITH PROBLEM PARAMETER 8 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 16 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 16 WITH PROBLEM PARAMETER 12 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 17 WITH PROBLEM PARAMETER 8 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 17 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 17 WITH PROBLEM PARAMETER 12 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 17 WITH PROBLEM PARAMETER 14 COMPUTED ROOT = 1.0000000000000 PROBLEM NUMBER 18 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0.52359877559830 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0.42247770964124 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 0.30669941048320 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 3 COMPUTED ROOT = 0.22370545765466 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 0.17171914751951 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 0.13825715505682 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 3.4657359020854D-02 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 40 COMPUTED ROOT = 1.7328679513999D-02 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 60 COMPUTED ROOT = 1.1552453009332D-02 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 80 COMPUTED ROOT = 8.6643397569993D-03 PROBLEM NUMBER 19 WITH PROBLEM PARAMETER 100 COMPUTED ROOT = 6.9314718055995D-03 PROBLEM NUMBER 20 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 3.8402551840622D-02 PROBLEM NUMBER 20 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 9.9000099980005D-03 PROBLEM NUMBER 20 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 2.4937500390620D-03 PROBLEM NUMBER 21 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 0.50000000000000 PROBLEM NUMBER 21 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 0.34595481584824 PROBLEM NUMBER 21 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 0.24512233375331 PROBLEM NUMBER 21 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 0.19554762353657 PROBLEM NUMBER 21 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 0.16492095727644 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0.27550804099948 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 0.13775402049974 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 1.0305283778156D-02 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 3.6171081789041D-03 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 8 COMPUTED ROOT = 4.1087291849640D-04 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 2.5989575892908D-05 PROBLEM NUMBER 22 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 7.6685951221853D-06 PROBLEM NUMBER 23 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0.40105813754155 PROBLEM NUMBER 23 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 0.51615351875793 PROBLEM NUMBER 23 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 0.53952222690842 PROBLEM NUMBER 23 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 0.54818229434066 PROBLEM NUMBER 23 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 0.55270466667849 PROBLEM NUMBER 24 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 0.50000000000000 PROBLEM NUMBER 24 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 0.20000000000000 PROBLEM NUMBER 24 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 6.6666666666667D-02 PROBLEM NUMBER 24 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 5.0000000000000D-02 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 2.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 3 COMPUTED ROOT = 3.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 4.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 5.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 6 COMPUTED ROOT = 6.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 7 COMPUTED ROOT = 7.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 9 COMPUTED ROOT = 9.0000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 11 COMPUTED ROOT = 11.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 13 COMPUTED ROOT = 13.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 15.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 17 COMPUTED ROOT = 17.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 19 COMPUTED ROOT = 19.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 21 COMPUTED ROOT = 21.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 23 COMPUTED ROOT = 23.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 25 COMPUTED ROOT = 25.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 27 COMPUTED ROOT = 27.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 29 COMPUTED ROOT = 29.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 31 COMPUTED ROOT = 31.000000000000 PROBLEM NUMBER 25 WITH PROBLEM PARAMETER 33 COMPUTED ROOT = 33.000000000000 PROBLEM NUMBER 26 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 2.2317679157465D-02 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 1 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 2 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 3 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 4 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 5 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 6 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 7 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 8 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 9 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 10 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 11 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 12 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 13 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 14 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 15 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 16 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 17 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 18 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 19 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 21 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 22 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 23 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 24 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 25 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 26 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 27 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 28 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 29 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 30 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 31 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 32 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 33 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 34 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 35 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 36 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 37 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 38 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 39 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 27 WITH PROBLEM PARAMETER 40 COMPUTED ROOT = 0.62380651896161 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 20 COMPUTED ROOT = 5.9051305594220D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 21 COMPUTED ROOT = 5.6367155339937D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 22 COMPUTED ROOT = 5.3916409455592D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 23 COMPUTED ROOT = 5.1669892394942D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 24 COMPUTED ROOT = 4.9603096699145D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 25 COMPUTED ROOT = 4.7695285287639D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 26 COMPUTED ROOT = 4.5928793239949D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 27 COMPUTED ROOT = 4.4288479195665D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 28 COMPUTED ROOT = 4.2761290257883D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 29 COMPUTED ROOT = 4.1335913915954D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 30 COMPUTED ROOT = 4.0002497338020D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 31 COMPUTED ROOT = 3.8752419296207D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 32 COMPUTED ROOT = 3.7578103559958D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 33 COMPUTED ROOT = 3.6472865219959D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 34 COMPUTED ROOT = 3.5430783356532D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 35 COMPUTED ROOT = 3.4446594929961D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 36 COMPUTED ROOT = 3.3515605877800D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 37 COMPUTED ROOT = 3.2633616249437D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 38 COMPUTED ROOT = 3.1796856858426D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 39 COMPUTED ROOT = 3.1001935436965D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 40 COMPUTED ROOT = 3.0245790670210D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 100 COMPUTED ROOT = 1.2277994232462D-05 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 200 COMPUTED ROOT = 6.1695393904409D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 300 COMPUTED ROOT = 4.1198585298293D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 400 COMPUTED ROOT = 3.0924623877272D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 500 COMPUTED ROOT = 2.4752044261050D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 600 COMPUTED ROOT = 2.0633567678513D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 700 COMPUTED ROOT = 1.7690120078154D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 800 COMPUTED ROOT = 1.5481615698859D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 900 COMPUTED ROOT = 1.3763345366022D-06 PROBLEM NUMBER 28 WITH PROBLEM PARAMETER 1000 COMPUTED ROOT = 1.2388385788997D-06