SUBROUTINE AUTOCO(X,N,IWRITE,XAUTOC) C C PURPOSE--THIS SUBROUTINE COMPUTES THE C SAMPLE AUTOCORRELATION COEFFICIENT C OF THE DATA IN THE INPUT VECTOR X. C THE SAMPLE AUTOCORRELATION COEFFICIENT = THE CORRELATION C BETWEEN X(I) AND X(I+1) OVER THE ENTIRE SAMPLE. C THE AUTOCORRELATION COEFFICIENT COEFFICIENT WILL BE A C SINGLE PRECISION VALUE BETWEEN -1.0 AND 1.0 C (INCLUSIVELY). C INPUT ARGUMENTS--X = THE SINGLE PRECISION VECTOR OF C (UNSORTED) OBSERVATIONS. C --N = THE INTEGER NUMBER OF OBSERVATIONS C IN THE VECTOR X. C --IWRITE = AN INTEGER FLAG CODE WHICH C (IF SET TO 0) WILL SUPPRESS C THE PRINTING OF THE C SAMPLE AUTOCORRELATION COEFFICIENT C AS IT IS COMPUTED; C OR (IF SET TO SOME INTEGER C VALUE NOT EQUAL TO 0), C LIKE, SAY, 1) WILL CAUSE C THE PRINTING OF THE C SAMPLE AUTOCORRELATION COEFFICIENT C AT THE TIME IT IS COMPUTED. C OUTPUT ARGUMENTS--XAUTOC = THE SINGLE PRECISION VALUE OF THE C COMPUTED SAMPLE AUTOCORRELATION C COEFFICIENT. C THIS SINGLE PRECISION VALUE C WILL BE BETWEEN -1.0 AND 1.0 C (INCLUSIVELY). C OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE C SAMPLE AUTOCORRELATION COEFFICIENT. C PRINTING--NONE, UNLESS IWRITE HAS BEEN SET TO A NON-ZERO C INTEGER, OR UNLESS AN INPUT ARGUMENT ERROR C CONDITION EXISTS. C RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE C OF N FOR THIS SUBROUTINE. C OTHER DATAPAC SUBROUTINES NEEDED--NONE. C FORTRAN LIBRARY SUBROUTINES NEEDED--SQRT. C MODE OF INTERNAL OPERATIONS--SINGLE PRECISION. C LANGUAGE--ANSI FORTRAN. C REFERENCES--JENKINS AND WATTS, SPECTRAL ANALYSIS AND C ITS APPLICATIONS, 1968, PAGES 5, 182. C WRITTEN BY--JAMES J. FILLIBEN C STATISTICAL ENGINEERING DIVISION (714) C NATIONAL BUREAU OF STANDARDS C GAITHERSBURG, MD 20899 C PHONE: 301-921-3651 C ORIGINAL VERSION--JUNE 1972. C UPDATED --SEPTEMBER 1975. C UPDATED --NOVEMBER 1975. C C--------------------------------------------------------------------- C DIMENSION X(1) C IPR=6 C C CHECK THE INPUT ARGUMENTS FOR ERRORS C AN=N IF(N.LT.1)GOTO50 IF(N.EQ.1)GOTO55 HOLD=X(1) DO60I=2,N IF(X(I).NE.HOLD)GOTO90 60 CONTINUE WRITE(IPR, 9)HOLD XAUTOC=0.0 GOTO201 50 WRITE(IPR,15) WRITE(IPR,47)N RETURN 55 WRITE(IPR,18) XAUTOC=0.0 GOTO201 90 CONTINUE 9 FORMAT(1H ,109H***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUME 1NT (A VECTOR) TO THE AUTOCO SUBROUTINE HAS ALL ELEMENTS = ,E15.8,6 1H *****) 15 FORMAT(1H , 91H***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE 1 AUTOCO SUBROUTINE IS NON-POSITIVE *****) 18 FORMAT(1H ,100H***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUME 1NT TO THE AUTOCO SUBROUTINE HAS THE VALUE 1 *****) 47 FORMAT(1H , 35H***** THE VALUE OF THE ARGUMENT IS ,I8 ,6H *****) C C-----START POINT----------------------------------------------------- C XBAR=0.0 DO100I=1,N XBAR=XBAR+X(I) 100 CONTINUE XBAR1=XBAR-X(N) XBAR1=XBAR1/(AN-1.0) XBAR2=XBAR-X(1) XBAR2=XBAR2/(AN-1.0) SUM1=0.0 SUM2=0.0 SUM3=0.0 NM1=N-1 DO200I=1,NM1 IP1=I+1 SUM1=SUM1+(X(I)-XBAR1)*(X(IP1)-XBAR2) SUM2=SUM2+(X(I)-XBAR1)**2 SUM3=SUM3+(X(IP1)-XBAR2)**2 200 CONTINUE XAUTOC=SUM1/(SQRT(SUM2*SUM3)) C 201 IF(IWRITE.EQ.0)RETURN WRITE(IPR,999) WRITE(IPR,205)N,XAUTOC 205 FORMAT(1H ,53HTHE LINEAR AUTOCORRELATION COEFFICIENT OF THE SET OF 1 ,I6,17H OBSERVATIONS IS ,F14.6) 999 FORMAT(1H ) RETURN END