home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / DOOG / PCSSP1.ZIP / ITRPAPSM.ZIP / DACFI.FOR < prev    next >
Text File  |  1985-11-29  |  6KB  |  161 lines

  1. C
  2. C     ..................................................................
  3. C
  4. C        SUBROUTINE DACFI
  5. C
  6. C        PURPOSE
  7. C           TO INTERPOLATE FUNCTION VALUE Y FOR A GIVEN ARGUMENT VALUE
  8. C           X USING A GIVEN TABLE (ARG,VAL) OF ARGUMENT AND FUNCTION
  9. C           VALUES.
  10. C
  11. C        USAGE
  12. C           CALL DACFI (X,ARG,VAL,Y,NDIM,EPS,IER)
  13. C
  14. C        DESCRIPTION OF PARAMETERS
  15. C           X      - DOUBLE PRECISION ARGUMENT VALUE SPECIFIED BY INPUT.
  16. C           ARG    - DOUBLE PRECISION INPUT VECTOR (DIMENSION NDIM) OF
  17. C                    ARGUMENT VALUES OF THE TABLE (POSSIBLY DESTROYED).
  18. C           VAL    - DOUBLE PRECISION INPUT VECTOR (DIMENSION NDIM) OF
  19. C                    FUNCTION VALUES OF THE TABLE (DESTROYED).
  20. C           Y      - RESULTING INTERPOLATED DOUBLE PRECISION FUNCTION
  21. C                    VALUE.
  22. C           NDIM   - AN INPUT VALUE WHICH SPECIFIES THE NUMBER OF
  23. C                    POINTS IN TABLE (ARG,VAL).
  24. C           EPS    - SINGLE PRECISION INPUT CONSTANT WHICH IS USED AS
  25. C                    UPPER BOUND FOR THE ABSOLUTE ERROR.
  26. C           IER    - A RESULTING ERROR PARAMETER.
  27. C
  28. C        REMARKS
  29. C           (1) TABLE (ARG,VAL) SHOULD REPRESENT A SINGLE-VALUED
  30. C               FUNCTION AND SHOULD BE STORED IN SUCH A WAY, THAT THE
  31. C               DISTANCES ABS(ARG(I)-X) INCREASE WITH INCREASING
  32. C               SUBSCRIPT I. TO GENERATE THIS ORDER IN TABLE (ARG,VAL),
  33. C               SUBROUTINES DATSG, DATSM OR DATSE COULD BE USED IN A
  34. C               PREVIOUS STAGE.
  35. C           (2) NO ACTION BESIDES ERROR MESSAGE IN CASE NDIM LESS
  36. C               THAN 1.
  37. C           (3) INTERPOLATION IS TERMINATED EITHER IF THE DIFFERENCE
  38. C               BETWEEN TWO SUCCESSIVE INTERPOLATED VALUES IS
  39. C               ABSOLUTELY LESS THAN TOLERANCE EPS, OR IF THE ABSOLUTE
  40. C               VALUE OF THIS DIFFERENCE STOPS DIMINISHING, OR AFTER
  41. C               (NDIM-1) STEPS (THE NUMBER OF POSSIBLE STEPS IS
  42. C               DIMINISHED IF AT ANY STAGE INFINITY ELEMENT APPEARS IN
  43. C               THE DOWNWARD DIAGONAL OF INVERTED-DIFFERENCES-SCHEME
  44. C               AND IF IT IS IMPOSSIBLE TO ELIMINATE THIS INFINITY
  45. C               ELEMENT BY INTERCHANGING OF TABLE POINTS).
  46. C               FURTHER IT IS TERMINATED IF THE PROCEDURE DISCOVERS TWO
  47. C               ARGUMENT VALUES IN VECTOR ARG WHICH ARE IDENTICAL.
  48. C               DEPENDENT ON THESE FOUR CASES, ERROR PARAMETER IER IS
  49. C               CODED IN THE FOLLOWING FORM
  50. C                IER=0 - IT WAS POSSIBLE TO REACH THE REQUIRED
  51. C                        ACCURACY (NO ERROR).
  52. C                IER=1 - IT WAS IMPOSSIBLE TO REACH THE REQUIRED
  53. C                        ACCURACY BECAUSE OF ROUNDING ERRORS.
  54. C                IER=2 - IT WAS IMPOSSIBLE TO CHECK ACCURACY BECAUSE
  55. C                        NDIM IS LESS THAN 2, OR THE REQUIRED ACCURACY
  56. C                        COULD NOT BE REACHED BY MEANS OF THE GIVEN
  57. C                        TABLE. NDIM SHOULD BE INCREASED.
  58. C                IER=3 - THE PROCEDURE DISCOVERED TWO ARGUMENT VALUES
  59. C                        IN VECTOR ARG WHICH ARE IDENTICAL.
  60. C
  61. C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
  62. C           NONE
  63. C
  64. C        METHOD
  65. C           INTERPOLATION IS DONE BY CONTINUED FRACTIONS AND INVERTED-
  66. C           DIFFERENCES-SCHEME. ON RETURN Y CONTAINS AN INTERPOLATED
  67. C           FUNCTION VALUE AT POINT X, WHICH IS IN THE SENSE OF REMARK
  68. C           (3) OPTIMAL WITH RESPECT TO GIVEN TABLE. FOR REFERENCE, SEE
  69. C           F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
  70. C           MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.395-406.
  71. C
  72. C     ..................................................................
  73. C
  74.       SUBROUTINE DACFI(X,ARG,VAL,Y,NDIM,EPS,IER)
  75. C
  76. C
  77.       DIMENSION ARG(1),VAL(1)
  78.       DOUBLE PRECISION ARG,VAL,X,Y,Z,P1,P2,P3,Q1,Q2,Q3,AUX,H
  79.       IER=2
  80.       IF(NDIM)20,20,1
  81.     1 Y=VAL(1)
  82.       DELT2=0.
  83.       IF(NDIM-1)20,20,2
  84. C
  85. C     PREPARATIONS FOR INTERPOLATION LOOP
  86.     2 P2=1.D0
  87.       P3=Y
  88.       Q2=0.D0
  89.       Q3=1.D0
  90. C
  91. C
  92. C     START INTERPOLATION LOOP
  93.       DO 16 I=2,NDIM
  94.       II=0
  95.       P1=P2
  96.       P2=P3
  97.       Q1=Q2
  98.       Q2=Q3
  99.       Z=Y
  100.       DELT1=DELT2
  101.       JEND=I-1
  102. C
  103. C     COMPUTATION OF INVERTED DIFFERENCES
  104.     3 AUX=VAL(I)
  105.       DO 10 J=1,JEND
  106.       H=VAL(I)-VAL(J)
  107.       IF(DABS(H)-1.D-13*DABS(VAL(I)))4,4,9
  108.     4 IF(ARG(I)-ARG(J))5,17,5
  109.     5 IF(J-JEND)8,6,6
  110. C
  111. C     INTERCHANGE ROW I WITH ROW I+II
  112.     6 II=II+1
  113.       III=I+II
  114.       IF(III-NDIM)7,7,19
  115.     7 VAL(I)=VAL(III)
  116.       VAL(III)=AUX
  117.       AUX=ARG(I)
  118.       ARG(I)=ARG(III)
  119.       ARG(III)=AUX
  120.       GOTO 3
  121. C
  122. C     COMPUTATION OF VAL(I) IN CASE VAL(I)=VAL(J) AND J LESS THAN I-1
  123.     8 VAL(I)=1.D75
  124.       GOTO 10
  125. C
  126. C     COMPUTATION OF VAL(I) IN CASE VAL(I) NOT EQUAL TO VAL(J)
  127.     9 VAL(I)=(ARG(I)-ARG(J))/H
  128.    10 CONTINUE
  129. C     INVERTED DIFFERENCES ARE COMPUTED
  130. C
  131. C     COMPUTATION OF NEW Y
  132.       P3=VAL(I)*P2+(X-ARG(I-1))*P1
  133.       Q3=VAL(I)*Q2+(X-ARG(I-1))*Q1
  134.       IF(Q3)11,12,11
  135.    11 Y=P3/Q3
  136.       GOTO 13
  137.    12 Y=1.D75
  138.    13 DELT2=DABS(Z-Y)
  139.       IF(DELT2-EPS)19,19,14
  140.    14 IF(I-10)16,15,15
  141.    15 IF(DELT2-DELT1)16,18,18
  142.    16 CONTINUE
  143. C     END OF INTERPOLATION LOOP
  144. C
  145. C
  146.       RETURN
  147. C
  148. C     THERE ARE TWO IDENTICAL ARGUMENT VALUES IN VECTOR ARG
  149.    17 IER=3
  150.       RETURN
  151. C
  152. C     TEST VALUE DELT2 STARTS OSCILLATING
  153.    18 Y=Z
  154.       IER=1
  155.       RETURN
  156. C
  157. C     THERE IS SATISFACTORY ACCURACY WITHIN NDIM-1 STEPS
  158.    19 IER=0
  159.    20 RETURN
  160.       END
  161.