PROGRAM CUBGCVMAIN USE MODCUBGCV C CUBGCV TEST DRIVER C ------------------ C C AUTHOR - M.F.HUTCHINSON C CSIRO DIVISION OF WATER AND LAND RESOURCES C GPO BOX 1666 C CANBERRA ACT 2601 C AUSTRALIA C C LATEST REVISION - 7 AUGUST 1986 C C COMPUTER - VAX/DOUBLE C C USAGE - MAIN PROGRAM C C REQUIRED ROUTINES - CUBGCV,SPINT1,SPFIT1,SPCOF1,SPERR1,GGRAND C C REMARKS USES SUBROUTINE CUBGCV TO FIT A CUBIC SMOOTHING SPLINE C TO 50 DATA POINTS WHICH ARE GENERATED BY ADDING A RANDOM C VARIABLE WITH UNIFORM DENSITY IN THE INTERVAL [-0.3,0.3] C TO 50 POINTS SAMPLED FROM THE CURVE Y=SIN(3*PI*X/2). C RANDOM DEVIATES IN THE INTERVAL [0,1] ARE GENERATED BY THE C DOUBLE PRECISION FUNCTION GGRAND (SIMILAR TO IMSL FUNCTION C GGUBFS). THE ABSCISSAE ARE UNEQUALLY SPACED IN [0,1]. C C POINT STANDARD ERROR ESTIMATES ARE RETURNED IN SE BY C SETTING JOB=1. THE ERROR VARIANCE ESTIMATE IS RETURNED C IN VAR. IT COMPARES FAVOURABLY WITH THE TRUE VALUE OF 0.03. C SUMMARY STATISTICS FROM THE ARRAY WK ARE WRITTEN TO C UNIT 6. DATA VALUES AND FITTED VALUES WITH ESTIMATED C STANDARD ERRORS ARE ALSO WRITTEN TO UNIT 6. C PARAMETER (N=50, IC=49) C INTEGER JOB,IER DOUBLE PRECISION X(N),F(N),Y(N),DF(N),C(IC,3),WK(7*(N+2)), * VAR,SE(N) DOUBLE PRECISION GGRAND,DSEED C C---INITIALIZE--- DSEED=1.2345D4 JOB=1 VAR=-1.0D0 C C---CALCULATE DATA POINTS--- DO 10 I=1,N X(I)=(I - 0.5)/N + (2.0*GGRAND(DSEED) - 1.0)/(3.0*N) F(I)=DSIN(4.71238*X(I)) + (2.0*GGRAND(DSEED) - 1.0)*0.3 DF(I)=1.0D0 10 CONTINUE C C---FIT CUBIC SPLINE--- CALL CUBGCV(X,F,DF,N,Y,C,IC,VAR,JOB,SE,WK,IER) C C---WRITE OUT RESULTS--- WRITE(6,20) 20 FORMAT(' CUBGCV TEST DRIVER RESULTS:') WRITE(6,30) IER,VAR,WK(3),WK(4),WK(2) 30 FORMAT(/' IER =',I4/' VAR =',F7.4/ * ' GENERALIZED CROSS VALIDATION =',F7.4/ * ' MEAN SQUARE RESIDUAL =',F7.4/ * ' RESIDUAL DEGREES OF FREEDOM =',F7.2) WRITE(6,40) 40 FORMAT(/' INPUT DATA',17X,'OUTPUT RESULTS'// * ' I X(I) F(I)',6X,' Y(I) SE(I)', * ' C(I,1) C(I,2) C(I,3)') DO 60 I=1,N-1 WRITE(6,50) I,X(I),F(I),Y(I),SE(I),(C(I,J),J=1,3) 50 FORMAT(I4,2F8.4,6X,2F8.4,3E12.4) 60 CONTINUE WRITE(6,50) N,X(N),F(N),Y(N),SE(N) STOP END DOUBLE PRECISION FUNCTION GGRAND(DSEED) C C DOUBLE PRECISION UNIFORM RANDOM NUMBER GENERATOR C C CONSTANTS: A = 7**5 C B = 2**31 - 1 C C = 2**31 C C REFERENCE: IMSL MANUAL, CHAPTER G - GENERATION AND TESTING OF C RANDOM NUMBERS C C---SPECIFICATIONS FOR ARGUMENTS--- DOUBLE PRECISION DSEED C C---SPECIFICATIONS FOR LOCAL VARIABLES--- DOUBLE PRECISION A,B,C,S C DATA A,B,C/16807.0D0, 2147483647.0D0, 2147483648.0D0/ C S=DSEED S=DMOD(A*S, B) GGRAND=S/C DSEED=S RETURN END