/* nag_tsa_inhom_ma (g13mgc) Example Program.
*
* Copyright 2014 Numerical Algorithms Group.
*
* Mark 23, 2011.
*/
/* Pre-processor includes */
#include <stdio.h>
#include <nag.h>
#include <nag_stdlib.h>
#include <nagg13.h>
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);
}