home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE DRTMI
- C
- C PURPOSE
- C TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM FCT(X)=0
- C BY MEANS OF MUELLER-S ITERATION METHOD.
- C
- C USAGE
- C CALL DRTMI (X,F,FCT,XLI,XRI,EPS,IEND,IER)
- C PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
- C
- C DESCRIPTION OF PARAMETERS
- C X - DOUBLE PRECISION RESULTANT ROOT OF EQUATION
- C FCT(X)=0.
- C F - DOUBLE PRECISION RESULTANT FUNCTION VALUE
- C AT ROOT X.
- C FCT - NAME OF THE EXTERNAL DOUBLE PRECISION FUNCTION
- C SUBPROGRAM USED.
- C XLI - DOUBLE PRECISION INPUT VALUE WHICH SPECIFIES THE
- C INITIAL LEFT BOUND OF THE ROOT X.
- C XRI - DOUBLE PRECISION INPUT VALUE WHICH SPECIFIES THE
- C INITIAL RIGHT BOUND OF THE ROOT X.
- C EPS - SINGLE PRECISION INPUT VALUE WHICH SPECIFIES THE
- C UPPER BOUND OF THE ERROR OF RESULT X.
- C IEND - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED.
- C IER - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
- C IER=0 - NO ERROR,
- C IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS
- C FOLLOWED BY IEND SUCCESSIVE STEPS OF
- C BISECTION,
- C IER=2 - BASIC ASSUMPTION FCT(XLI)*FCT(XRI) LESS
- C THAN OR EQUAL TO ZERO IS NOT SATISFIED.
- C
- C REMARKS
- C THE PROCEDURE ASSUMES THAT FUNCTION VALUES AT INITIAL
- C BOUNDS XLI AND XRI HAVE NOT THE SAME SIGN. IF THIS BASIC
- C ASSUMPTION IS NOT SATISFIED BY INPUT VALUES XLI AND XRI, THE
- C PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2.
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C THE EXTERNAL DOUBLE PRECISION FUNCTION SUBPROGRAM FCT(X)
- C MUST BE FURNISHED BY THE USER.
- C
- C METHOD
- C SOLUTION OF EQUATION FCT(X)=0 IS DONE BY MEANS OF MUELLER-S
- C ITERATION METHOD OF SUCCESSIVE BISECTIONS AND INVERSE
- C PARABOLIC INTERPOLATION, WHICH STARTS AT THE INITIAL BOUNDS
- C XLI AND XRI. CONVERGENCE IS QUADRATIC IF THE DERIVATIVE OF
- C FCT(X) AT ROOT X IS NOT EQUAL TO ZERO. ONE ITERATION STEP
- C REQUIRES TWO EVALUATIONS OF FCT(X). FOR TEST ON SATISFACTORY
- C ACCURACY SEE FORMULAE (3,4) OF MATHEMATICAL DESCRIPTION.
- C FOR REFERENCE, SEE G. K. KRISTIANSEN, ZERO OF ARBITRARY
- C FUNCTION, BIT, VOL. 3 (1963), PP.205-206.
- C
- C ..................................................................
- C
- SUBROUTINE DRTMI(X,F,FCT,XLI,XRI,EPS,IEND,IER)
- C
- C
- DOUBLE PRECISION X,F,FCT,XLI,XRI,XL,XR,FL,FR,TOL,TOLF,A,DX,XM,FM
- C
- C PREPARE ITERATION
- IER=0
- XL=XLI
- XR=XRI
- X=XL
- TOL=X
- F=FCT(TOL)
- IF(F)1,16,1
- 1 FL=F
- X=XR
- TOL=X
- F=FCT(TOL)
- IF(F)2,16,2
- 2 FR=F
- IF(DSIGN(1.D0,FL)+DSIGN(1.D0,FR))25,3,25
- C
- C BASIC ASSUMPTION FL*FR LESS THAN 0 IS SATISFIED.
- C GENERATE TOLERANCE FOR FUNCTION VALUES.
- 3 I=0
- TOLF=100.*EPS
- C
- C
- C START ITERATION LOOP
- 4 I=I+1
- C
- C START BISECTION LOOP
- DO 13 K=1,IEND
- X=.5D0*(XL+XR)
- TOL=X
- F=FCT(TOL)
- IF(F)5,16,5
- 5 IF(DSIGN(1.D0,F)+DSIGN(1.D0,FR))7,6,7
- C
- C INTERCHANGE XL AND XR IN ORDER TO GET THE SAME SIGN IN F AND FR
- 6 TOL=XL
- XL=XR
- XR=TOL
- TOL=FL
- FL=FR
- FR=TOL
- 7 TOL=F-FL
- A=F*TOL
- A=A+A
- IF(A-FR*(FR-FL))8,9,9
- 8 IF(I-IEND)17,17,9
- 9 XR=X
- FR=F
- C
- C TEST ON SATISFACTORY ACCURACY IN BISECTION LOOP
- TOL=EPS
- A=DABS(XR)
- IF(A-1.D0)11,11,10
- 10 TOL=TOL*A
- 11 IF(DABS(XR-XL)-TOL)12,12,13
- 12 IF(DABS(FR-FL)-TOLF)14,14,13
- 13 CONTINUE
- C END OF BISECTION LOOP
- C
- C NO CONVERGENCE AFTER IEND ITERATION STEPS FOLLOWED BY IEND
- C SUCCESSIVE STEPS OF BISECTION OR STEADILY INCREASING FUNCTION
- C VALUES AT RIGHT BOUNDS. ERROR RETURN.
- IER=1
- 14 IF(DABS(FR)-DABS(FL))16,16,15
- 15 X=XL
- F=FL
- 16 RETURN
- C
- C COMPUTATION OF ITERATED X-VALUE BY INVERSE PARABOLIC INTERPOLATION
- 17 A=FR-F
- DX=(X-XL)*FL*(1.D0+F*(A-TOL)/(A*(FR-FL)))/TOL
- XM=X
- FM=F
- X=XL-DX
- TOL=X
- F=FCT(TOL)
- IF(F)18,16,18
- C
- C TEST ON SATISFACTORY ACCURACY IN ITERATION LOOP
- 18 TOL=EPS
- A=DABS(X)
- IF(A-1.D0)20,20,19
- 19 TOL=TOL*A
- 20 IF(DABS(DX)-TOL)21,21,22
- 21 IF(DABS(F)-TOLF)16,16,22
- C
- C PREPARATION OF NEXT BISECTION LOOP
- 22 IF(DSIGN(1.D0,F)+DSIGN(1.D0,FL))24,23,24
- 23 XR=X
- FR=F
- GO TO 4
- 24 XL=X
- FL=F
- XR=XM
- FR=FM
- GO TO 4
- C END OF ITERATION LOOP
- C
- C
- C ERROR RETURN IN CASE OF WRONG INPUT DATA
- 25 IER=2
- RETURN
- END
-