home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
fortran
/
library
/
ssp
/
numdiff
/
dcar.for
< prev
next >
Wrap
Text File
|
1986-01-03
|
4KB
|
132 lines
C
C ..................................................................
C
C SUBROUTINE DCAR
C
C PURPOSE
C TO COMPUTE, AT A GIVEN POINT X, AN APPROXIMATION Z TO THE
C DERIVATIVE OF AN ANALYTICALLY GIVEN FUNCTION FCT THAT IS 11-
C TIMES DIFFERENTIABLE IN A DOMAIN CONTAINING A CLOSED, 2-SIDED
C SYMMETRIC INTERVAL OF RADIUS ABSOLUTE H ABOUT X, USING FUNCTION
C VALUES ONLY ON THAT CLOSED INTERVAL.
C
C USAGE
C CALL DCAR (X,H,IH,FCT,Z)
C PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT
C
C DESCRIPTION OF PARAMETERS
C X - THE POINT AT WHICH THE DERIVATIVE IS TO BE COMPUTED
C H - THE NUMBER WHOSE ABSOLUTE VALUE DEFINES THE CLOSED,
C SYMMETRIC 2-SIDED INTERVAL ABOUT X (SEE PURPOSE)
C IH - INPUT PARAMETER (SEE REMARKS AND METHOD)
C IH NON-ZERO - THE SUBROUTINE GENERATES THE INTERNAL
C VALUE HH
C IH = 0 - THE INTERNAL VALUE HH IS SET TO ABSOLUTE H
C FCT - THE NAME OF THE EXTERNAL FUNCTION SUBPROGRAM THAT WILL
C GENERATE THE NECESSARY FUNCTION VALUES
C Z - RESULTING DERIVATIVE VALUE
C
C REMARKS
C (1) IF H = 0, THEN THERE IS NO COMPUTATION.
C (2) THE INTERNAL VALUE HH, WHICH IS DETERMINED ACCORDING TO
C IH, IS THE MAXIMUM STEP-SIZE USED IN THE COMPUTATION OF
C THE CENTRAL DIVIDED DIFFERENCES (SEE METHOD.) IF IH IS
C NON-ZERO, THEN THE SUBROUTINE GENERATES HH ACCORDING TO
C CRITERIA THAT BALANCE ROUND-OFF AND TRUNCATION ERROR. HH
C IS ALWAYS LESS THAN OR EQUAL TO ABSOLUTE H IN ABSOLUTE
C VALUE, SO THAT ALL COMPUTATION OCCURS WITHIN A RADIUS
C ABSOLUTE H OF X.
C
C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
C THE EXTERNAL FUNCTION SUBPROGRAM FCT(T) MUST BE FURNISHED BY
C THE USER.
C
C METHOD
C THE COMPUTATION OF Z IS BASED ON RICHARDSON'S AND ROMBERG'S
C EXTRAPOLATION METHOD AS APPLIED TO THE SEQUENCE OF CENTRAL
C DIVIDED DIFFERENCES ASSOCIATED WITH THE POINT PAIRS
C (X-(K*HH)/5,X+(K*HH)/5) K=1,...,5. (SEE FILLIPI, S. AND
C ENGELS, H., ALTES UND NEUES ZUR NUMERISCHEN DIFFERENTIATION,
C ELECTRONISCHE DATENVERARBEITUNG, ISS. 2 (1966), PP. 57-65.)
C
C ..................................................................
C
SUBROUTINE DCAR(X,H,IH,FCT,Z)
C
C
DIMENSION AUX(5)
C
C NO ACTION IN CASE OF ZERO INTERVAL LENGTH
IF(H)1,17,1
C
C GENERATE STEPSIZE HH FOR DIVIDED DIFFERENCES
1 C=ABS(H)
IF(IH)2,9,2
2 HH=.5
IF(C-HH)3,4,4
3 HH=C
4 A=FCT(X+HH)
B=FCT(X-HH)
Z=ABS((A-B)/(HH+HH))
A=.5*ABS(A+B)
HH=.5
IF(A-1.)6,6,5
5 HH=HH*A
6 IF(Z-1.)8,8,7
7 HH=HH/Z
8 IF(HH-C)10,10,9
9 HH=C
C
C INITIALIZE DIFFERENTIATION LOOP
10 Z=(FCT(X+HH)-FCT(X-HH))/(HH+HH)
J=5
JJ=J-1
AUX(J)=Z
DH=HH/FLOAT(J)
DZ=1.E38
C
C START DIFFERENTIATION LOOP
11 J=J-1
C=J
HH=C*DH
AUX(J)=(FCT(X+HH)-FCT(X-HH))/(HH+HH)
C
C INITIALIZE EXTRAPOLATION LOOP
D2=1.E38
B=0.
A=1./C
C
C START EXTRAPOLATION LOOP
DO 12 I=J,JJ
D1=D2
B=B+A
HH=(AUX(I)-AUX(I+1))/(B*(2.+B))
AUX(I+1)=AUX(I)+HH
C
C TEST ON OSCILLATING INCREMENTS
D2=ABS(HH)
IF(D2-D1)12,13,13
12 CONTINUE
C END OF EXTRAPOLATION LOOP
C
C UPDATE RESULT VALUE Z
I=JJ+1
GO TO 14
13 D2=D1
JJ=I
14 IF(D2-DZ)15,16,16
15 DZ=D2
Z=AUX(I)
16 IF(J-1)17,17,11
C END OF DIFFERENTIATION LOOP
C
17 RETURN
END
EXTRAPOLATION LOOP
C
C UPDATE RESULT VALUE Z
I=JJ+1
GO TO 14
13 D2=D1
JJ=I
14 IF(D2-DZ