home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE DAHI
- C
- C PURPOSE
- C TO INTERPOLATE FUNCTION VALUE Y FOR A GIVEN ARGUMENT VALUE
- C X USING A GIVEN TABLE (ARG,VAL) OF ARGUMENT, FUNCTION, AND
- C DERIVATIVE VALUES.
- C
- C USAGE
- C CALL DAHI (X,ARG,VAL,Y,NDIM,EPS,IER)
- C
- C DESCRIPTION OF PARAMETERS
- C X - DOUBLE PRECISION ARGUMENT VALUE SPECIFIED BY INPUT.
- C ARG - DOUBLE PRECISION INPUT VECTOR (DIMENSION NDIM) OF
- C ARGUMENT VALUES OF THE TABLE (NOT DESTROYED).
- C VAL - DOUBLE PRECISION INPUT VECTOR (DIMENSION 2*NDIM) OF
- C FUNCTION AND DERIVATIVE VALUES OF THE TABLE (DES-
- C TROYED). FUNCTION AND DERIVATIVE VALUES MUST BE
- C STORED IN PAIRS, THAT MEANS BEGINNING WITH FUNCTION
- C VALUE AT POINT ARG(1) EVERY FUNCTION VALUE MUST BE
- C FOLLOWED BY THE DERIVATIVE VALUE AT THE SAME POINT.
- C Y - RESULTING INTERPOLATED DOUBLE PRECISION FUNCTION
- C VALUE.
- C NDIM - AN INPUT VALUE WHICH SPECIFIES THE NUMBER OF
- C POINTS IN TABLE (ARG,VAL).
- C EPS - SINGLE PRECISION INPUT CONSTANT WHICH IS USED AS
- C UPPER BOUND FOR THE ABSOLUTE ERROR.
- C IER - A RESULTING ERROR PARAMETER.
- C
- C REMARKS
- C (1) TABLE (ARG,VAL) SHOULD REPRESENT A SINGLE-VALUED
- C FUNCTION AND SHOULD BE STORED IN SUCH A WAY, THAT THE
- C DISTANCES ABS(ARG(I)-X) INCREASE WITH INCREASING
- C SUBSCRIPT I. TO GENERATE THIS ORDER IN TABLE (ARG,VAL),
- C SUBROUTINES DATSG, DATSM OR DATSE COULD BE USED IN A
- C PREVIOUS STAGE.
- C (2) NO ACTION BESIDES ERROR MESSAGE IN CASE NDIM LESS
- C THAN 1.
- C (3) INTERPOLATION IS TERMINATED EITHER IF THE DIFFERENCE
- C BETWEEN TWO SUCCESSIVE INTERPOLATED VALUES IS
- C ABSOLUTELY LESS THAN TOLERANCE EPS, OR IF THE ABSOLUTE
- C VALUE OF THIS DIFFERENCE STOPS DIMINISHING, OR AFTER
- C (2*NDIM-2) STEPS. FURTHER IT IS TERMINATED IF THE
- C PROCEDURE DISCOVERS TWO ARGUMENT VALUES IN VECTOR ARG
- C WHICH ARE IDENTICAL. DEPENDENT ON THESE FOUR CASES,
- C ERROR PARAMETER IER IS CODED IN THE FOLLOWING FORM
- C IER=0 - IT WAS POSSIBLE TO REACH THE REQUIRED
- C ACCURACY (NO ERROR).
- C IER=1 - IT WAS IMPOSSIBLE TO REACH THE REQUIRED
- C ACCURACY BECAUSE OF ROUNDING ERRORS.
- C IER=2 - IT WAS IMPOSSIBLE TO CHECK ACCURACY BECAUSE
- C NDIM IS LESS THAN 2, OR THE REQUIRED ACCURACY
- C COULD NOT BE REACHED BY MEANS OF THE GIVEN
- C TABLE. NDIM SHOULD BE INCREASED.
- C IER=3 - THE PROCEDURE DISCOVERED TWO ARGUMENT VALUES
- C IN VECTOR ARG WHICH ARE IDENTICAL.
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C NONE
- C
- C METHOD
- C INTERPOLATION IS DONE BY MEANS OF AITKENS SCHEME OF
- C HERMITE INTERPOLATION. ON RETURN Y CONTAINS AN INTERPOLATED
- C FUNCTION VALUE AT POINT X, WHICH IS IN THE SENSE OF REMARK
- C (3) OPTIMAL WITH RESPECT TO GIVEN TABLE. FOR REFERENCE, SEE
- C F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,
- C MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.314-317, AND
- C GERSHINSKY/LEVINE, AITKEN-HERMITE INTERPOLATION,
- C JACM, VOL.11, ISS.3 (1964), PP.352-356.
- C
- C ..................................................................
- C
- SUBROUTINE DAHI(X,ARG,VAL,Y,NDIM,EPS,IER)
- C
- C
- DIMENSION ARG(1),VAL(1)
- DOUBLE PRECISION ARG,VAL,X,Y,H,H1,H2
- IER=2
- H2=X-ARG(1)
- IF(NDIM-1)2,1,3
- 1 Y=VAL(1)+VAL(2)*H2
- 2 RETURN
- C
- C VECTOR ARG HAS MORE THAN 1 ELEMENT.
- C THE FIRST STEP PREPARES VECTOR VAL SUCH THAT AITKEN SCHEME CAN BE
- C USED.
- 3 I=1
- DO 5 J=2,NDIM
- H1=H2
- H2=X-ARG(J)
- Y=VAL(I)
- VAL(I)=Y+VAL(I+1)*H1
- H=H1-H2
- IF(H)4,13,4
- 4 VAL(I+1)=Y+(VAL(I+2)-Y)*H1/H
- 5 I=I+2
- VAL(I)=VAL(I)+VAL(I+1)*H2
- C END OF FIRST STEP
- C
- C PREPARE AITKEN SCHEME
- DELT2=0.
- IEND=I-1
- C
- C START AITKEN-LOOP
- DO 9 I=1,IEND
- DELT1=DELT2
- Y=VAL(1)
- M=(I+3)/2
- H1=ARG(M)
- DO 6 J=1,I
- K=I+1-J
- L=(K+1)/2
- H=ARG(L)-H1
- IF(H)6,14,6
- 6 VAL(K)=(VAL(K)*(X-H1)-VAL(K+1)*(X-ARG(L)))/H
- DELT2=DABS(Y-VAL(1))
- IF(DELT2-EPS)11,11,7
- 7 IF(I-8)9,8,8
- 8 IF(DELT2-DELT1)9,12,12
- 9 CONTINUE
- C END OF AITKEN-LOOP
- C
- 10 Y=VAL(1)
- RETURN
- C
- C THERE IS SUFFICIENT ACCURACY WITHIN 2*NDIM-2 ITERATION STEPS
- 11 IER=0
- GOTO 10
- C
- C TEST VALUE DELT2 STARTS OSCILLATING
- 12 IER=1
- RETURN
- C
- C THERE ARE TWO IDENTICAL ARGUMENT VALUES IN VECTOR ARG
- 13 Y=VAL(1)
- 14 IER=3
- RETURN
- END