home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / fortran / library / ssp / rootnleq / drtwi.for < prev    next >
Encoding:
Text File  |  1985-11-29  |  3.6 KB  |  110 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE DRTWI
  5. C
  6. C        PURPOSE
  7. C           TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM X=FCT(X)
  8. C           BY MEANS OF WEGSTEIN-S ITERATION METHOD.
  9. C
  10. C        USAGE
  11. C           CALL DRTWI (X,VAL,FCT,XST,EPS,IEND,IER)
  12. C           PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT.
  13. C
  14. C        DESCRIPTION OF PARAMETERS
  15. C           X      - DOUBLE PRECISION RESULTANT ROOT OF EQUATION
  16. C                    X=FCT(X).
  17. C           VAL    - DOUBLE PRECISION RESULTANT VALUE OF X-FCT(X)
  18. C                    AT ROOT X.
  19. C           FCT    - NAME OF THE EXTERNAL DOUBLE PRECISION FUNCTION
  20. C                    SUBPROGRAM USED.
  21. C           XST    - DOUBLE PRECISION INPUT VALUE WHICH SPECIFIES THE
  22. C                    INITIAL GUESS OF THE ROOT X.
  23. C           EPS    - SINGLE PRECISION INPUT VALUE WHICH SPECIFIES THE
  24. C                    UPPER BOUND OF THE ERROR OF RESULT X.
  25. C           IEND   - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED.
  26. C           IER    - RESULTANT ERROR PARAMETER CODED AS FOLLOWS
  27. C                     IER=0 - NO ERROR,
  28. C                     IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS,
  29. C                     IER=2 - AT ANY ITERATION STEP THE DENOMINATOR OF
  30. C                             ITERATION FORMULA WAS EQUAL TO ZERO.
  31. C
  32. C        REMARKS
  33. C           THE PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2
  34. C           IF AT ANY ITERATION STEP THE DENOMINATOR OF ITERATION
  35. C           FORMULA WAS EQUAL TO ZERO. THAT MEANS THAT THERE IS AT
  36. C           LEAST ONE POINT IN THE RANGE IN WHICH ITERATION MOVES WITH
  37. C           DERIVATIVE OF FCT(X) EQUAL TO 1.
  38. C
  39. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  40. C           THE EXTERNAL DOUBLE PRECISION FUNCTION SUBPROGRAM FCT(X)
  41. C           MUST BE FURNISHED BY THE USER.
  42. C
  43. C        METHOD
  44. C           SOLUTION OF EQUATION X=FCT(X) IS DONE BY MEANS OF
  45. C           WEGSTEIN-S ITERATION METHOD, WHICH STARTS AT THE INITIAL
  46. C           GUESS XST OF A ROOT X. ONE ITERATION STEP REQUIRES ONE
  47. C           EVALUATION OF FCT(X). FOR TEST ON SATISFACTORY ACCURACY SEE
  48. C           FORMULAE (2) OF MATHEMATICAL DESCRIPTION.
  49. C           FOR REFERENCE, SEE
  50. C           (1) G. N. LANCE, NUMERICAL METHODS FOR HIGH SPEED COMPUTERS,
  51. C               ILIFFE, LONDON, 1960, PP.134-138,
  52. C           (2) J. WEGSTEIN, ALGORITHM 2, CACM, VOL.3, ISS.2 (1960),
  53. C               PP.74,
  54. C           (3) H.C. THACHER, ALGORITHM 15, CACM, VOL.3, ISS.8 (1960),
  55. C               PP.475,
  56. C           (4) J.G. HERRIOT, ALGORITHM 26, CACM, VOL.3, ISS.11 (1960),
  57. C               PP.603.
  58. C
  59. C     ..................................................................
  60. C
  61.       SUBROUTINE DRTWI(X,VAL,FCT,XST,EPS,IEND,IER)
  62. C
  63. C
  64.       DOUBLE PRECISION X,VAL,FCT,XST,A,B,D,TOL
  65. C
  66. C     PREPARE ITERATION
  67.       IER=0
  68.       TOL=XST
  69.       X=FCT(TOL)
  70.       A=X-XST
  71.       B=-A
  72.       TOL=X
  73.       VAL=X-FCT(TOL)
  74. C
  75. C
  76. C     START ITERATION LOOP
  77.       DO 6 I=1,IEND
  78.       IF(VAL)1,7,1
  79. C
  80. C     EQUATION IS NOT SATISFIED BY X
  81.     1 B=B/VAL-1.D0
  82.       IF(B)2,8,2
  83. C
  84. C     ITERATION IS POSSIBLE
  85.     2 A=A/B
  86.       X=X+A
  87.       B=VAL
  88.       TOL=X
  89.       VAL=X-FCT(TOL)
  90. C
  91. C     TEST ON SATISFACTORY ACCURACY
  92.       TOL=EPS
  93.       D=DABS(X)
  94.       IF(D-1.D0)4,4,3
  95.     3 TOL=TOL*D
  96.     4 IF(DABS(A)-TOL)5,5,6
  97.     5 IF(DABS(VAL)-1.D1*TOL)7,7,6
  98.     6 CONTINUE
  99. C     END OF ITERATION LOOP
  100. C
  101. C
  102. C     NO CONVERGENCE AFTER IEND ITERATION STEPS. ERROR RETURN.
  103.       IER=1
  104.     7 RETURN
  105. C
  106. C     ERROR RETURN IN CASE OF ZERO DIVISOR
  107.     8 IER=2
  108.       RETURN
  109.       END
  110.