/* nag_tsa_inhom_ma (g13mgc) Example Program. * * Copyright 2011, Numerical Algorithms Group. * * Mark 23, 2011. */ /* Pre-processor includes */ #include #include #include #include int main(void) { /* Integer scalar and array declarations */ Integer i, m1, m2, nb, pn, ierr, lsinit; Integer exit_status = 0; /* NAG structures and types */ NagError fail; Nag_TS_Interpolation inter[2]; Nag_TS_Transform ftype; /* Double scalar and array declarations */ double p, tau; double *ma = 0, *rcomm = 0, *sinit = 0, *t = 0, *wma = 0; /* Character scalar and array declarations */ char cinter[40], cftype[40]; /* Initialise the error structure */ INIT_FAIL(fail); printf("nag_tsa_inhom_ma (g13mgc) Example Program Results\n\n"); /* Skip heading in data file */ scanf("%*[^\n] "); /* Read in the problem size */ scanf("%ld%ld%*[^\n] ",&m1,&m2); /* Read in the transformation function and its parameter */ scanf("%39s",cftype); ftype = (Nag_TS_Transform) nag_enum_name_to_value(cftype); scanf("%lf",&p); /* Read in the interpolation method to use */ scanf("%39s",cinter); inter[0] = (Nag_TS_Interpolation) nag_enum_name_to_value(cinter); scanf("%39s",cinter); inter[1] = (Nag_TS_Interpolation) nag_enum_name_to_value(cinter); /* Read in the decay parameter */ scanf("%lf%*[^\n] ", &tau); /* Read in the initial values */ if (ftype == Nag_AbsDiff || ftype == Nag_AbsDiffScaled) { lsinit = 2 * m2 + 3; } else { lsinit = m2 + 2; } if (!(sinit = NAG_ALLOC(lsinit, double))) { printf("Allocation failure\n"); exit_status = -1; goto END; } for (i = 0; i < lsinit; i++) { scanf("%lf", &sinit[i]); } scanf("%*[^\n] "); /* Print some titles */ printf(" Time MA\n"); printf(" --------------------------------\n"); if (!(rcomm = NAG_ALLOC(2*m2 + 20, double))) { printf("Allocation failure\n"); exit_status = -1; goto END; } for (pn = 0;;) { /* Read in the number of observations in this block */ ierr = scanf("%"NAG_IFMT, &nb); if (ierr == EOF || ierr < 1) break; scanf("%*[^\n] "); /* Allocate MA, T and WMA to the required size */ NAG_FREE(ma); NAG_FREE(t); NAG_FREE(wma); if (!(ma = NAG_ALLOC(nb, double)) || !(t = NAG_ALLOC(nb,double)) || !(wma = NAG_ALLOC(nb,double))) { printf("Allocation failure\n"); exit_status = -1; goto END; } /* Read in the data for this block */ for (i = 0; i < nb; i++) { scanf("%lf%lf", &t[i], &ma[i]); } scanf("%*[^\n] "); /* Call nag_tsa_inhom_ma (g13mgc) to update the moving average operator for this block of data. The routine overwrites the input data */ nag_tsa_inhom_ma(nb,ma,t,tau,m1,m2,sinit,inter,ftype,&p,&pn,wma,rcomm, &fail); if (fail.code != NE_NOERROR) { printf("Error from nag_tsa_inhom_ma (g13mgc).\n%s\n", fail.message); exit_status = -1; goto END; } /* Display the results for this block of data */ for (i = 0; i < nb; i++) { printf(" %3ld %10.1f %10.3f\n", pn-nb+i+1,t[i],ma[i]); } printf("\n"); } END: NAG_FREE(ma); NAG_FREE(wma); NAG_FREE(t); NAG_FREE(sinit); NAG_FREE(rcomm); return(exit_status); }