* G13AMF Example Program Text * Mark 22 Revised. NAG Copyright 2008. * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER NMAX, NFMAX, PMAX PARAMETER (NMAX=200,NFMAX=12,PMAX=5) * .. Local Scalars .. DOUBLE PRECISION AD, DV INTEGER I, IFAIL, ITYPE, IVAL, K, MODE, N, NF, P * .. Local Arrays .. DOUBLE PRECISION FSE(NFMAX), FV(NFMAX), INIT(PMAX+2), PARAM(4), + R(PMAX+13), RES(NMAX), Y(NMAX), YHAT(NMAX) * .. External Subroutines .. EXTERNAL G13AMF * .. Executable Statements .. CONTINUE WRITE (NOUT,*) 'G13AMF Example Program Results' * * Skip headings in data file READ (NIN,*) * Read in the initial arguments and check array sizes READ (NIN,*) MODE, ITYPE, N, NF IF (N.GT.NMAX .OR. NF.GT.NFMAX) THEN WRITE (NOUT,99996) GO TO 80 END IF READ (NIN,*) (Y(I),I=1,N) * Read in the ITYPE dependent arguments (skipping headings) IF (ITYPE.EQ.1) THEN READ (NIN,*) PARAM(1) P = 0 IVAL = 1 ELSE IF (ITYPE.EQ.2) THEN READ (NIN,*) PARAM(1), PARAM(2) P = 0 IVAL = 2 ELSE IF (ITYPE.EQ.3) THEN READ (NIN,*) PARAM(1), PARAM(2), PARAM(3) P = 0 IVAL = 2 ELSE READ (NIN,*) PARAM(1), PARAM(2), PARAM(3), PARAM(4), P IVAL = P + 2 IF (P.GT.PMAX) THEN WRITE (NOUT,*) 'Problem size too large, increase array ', + 'limits : P,MP=', P, PMAX GO TO 80 END IF END IF * Read in the MODE dependent arguments (skipping headings) IF (MODE.EQ.0) THEN * User supplied initial values READ (NIN,*) (INIT(I),I=1,IVAL) ELSE IF (MODE.EQ.1) THEN * Continuing from a previously saved R READ (NIN,*) (R(I),I=1,P+13) ELSE IF (MODE.EQ.2) THEN * Initial values calculated from first K observations READ (NIN,*) K END IF * * Call the library routine IFAIL = 1 CALL G13AMF(MODE,ITYPE,P,PARAM,N,Y,K,INIT,NF,FV,FSE,YHAT,RES,DV, + AD,R,IFAIL) IF (IFAIL.NE.0) THEN WRITE (NOUT,99997) IFAIL GO TO 80 END IF * Display the output WRITE (NOUT,*) WRITE (NOUT,*) 'Initial values used:' DO 20 I = 1, IVAL WRITE (NOUT,99998) I, INIT(I) 20 CONTINUE WRITE (NOUT,*) WRITE (NOUT,99999) 'Mean Deviation = ', DV WRITE (NOUT,99999) 'Absolute Deviation = ', AD WRITE (NOUT,*) WRITE (NOUT,*) ' Observed 1-Step' WRITE (NOUT,*) ' Period Values Forecast Residual' WRITE (NOUT,*) DO 40 I = 1, N WRITE (NOUT,99998) I, Y(I), YHAT(I), RES(I) 40 CONTINUE WRITE (NOUT,*) WRITE (NOUT,*) ' Forecast Standard' WRITE (NOUT,*) ' Period Values Errors' WRITE (NOUT,*) DO 60 I = 1, NF WRITE (NOUT,99998) N + I, FV(I), FSE(I) 60 CONTINUE * 80 CONTINUE * 99999 FORMAT (A,E12.4) 99998 FORMAT (I4,3(1X,F12.3)) 99997 FORMAT (1X,' ** G13AMF returned with IFAIL = ',I5) 99996 FORMAT (1X,' ** Problem size too large, increase array limits') END