/* nag_tsa_multi_diff (g13dlc) Example Program. * * Copyright 2002 Numerical Algorithms Group. * * Mark 7, 2002. */ #include #include #include #include #include int main(int argc, char *argv[]) { FILE *fpin, *fpout; /* Scalars */ Integer exit_status, i, j, k, maxd, mind, n, nd, nw, pdw, pddelta, kmax; NagError fail; /* Arrays */ double *delta = 0, *w = 0, *z = 0; Integer *id = 0, *tr = 0; #define W(I, J) w[(J-1)*pdw + I - 1] #define DELTA(I, J) delta[(J-1)*pddelta + I - 1] #define Z(I, J) z[(J-1)*kmax + I - 1] INIT_FAIL(fail); /* Check for command-line IO options */ fpin = nag_example_file_io(argc, argv, "-data", NULL); fpout = nag_example_file_io(argc, argv, "-results", NULL); exit_status = 0; fprintf(fpout, "nag_tsa_multi_diff (g13dlc) Example Program Results\n"); /* Skip heading in data file */ fscanf(fpin, "%*[^\n] "); fscanf(fpin, "%ld%ld%*[^\n] ", &k, &n); if (k > 0 && n > 0) { kmax = k; /* Allocate array id */ if (!(id = NAG_ALLOC(k, Integer))) { fprintf(fpout, "Allocation failure\n"); exit_status = -1; goto END; } for (i = 1; i <= k; ++i) fscanf(fpin, "%ld", &id[i-1]); fscanf(fpin, "%*[^\n] "); mind = 0; maxd = 0; for (i = 1; i <= k; ++i) { mind = MIN(mind, id[i-1]); maxd = MAX(maxd, id[i-1]); } if (mind >= 0) { /* Allocate arrays */ nw = n - maxd; if (!(tr = NAG_ALLOC(k, Integer)) || !(delta = NAG_ALLOC(kmax * maxd, double)) || !(w = NAG_ALLOC(kmax * nw, double)) || !(z = NAG_ALLOC(kmax * n, double))) { fprintf(fpout, "Allocation failure\n"); exit_status = -1; goto END; } pdw = kmax; pddelta = kmax; for (i = 1; i <= k; ++i) { for (j = 1; j <= n; ++j) fscanf(fpin, "%lf", &Z(i, j)); fscanf(fpin, "%*[^\n] "); } for (i = 1; i <= k; ++i) fscanf(fpin, "%ld", &tr[i-1]); fscanf(fpin, "%*[^\n] "); if (maxd > 0) { for (i = 1; i <= k; ++i) { for (j = 1; j <= id[i-1]; ++j) fscanf(fpin, "%lf", &DELTA(i, j)); fscanf(fpin, "%*[^\n] "); } } /* nag_tsa_multi_diff (g13dlc). * Multivariate time series, differences and/or transforms */ nag_tsa_multi_diff(k, n, z, tr, id, delta, w, &nd, &fail); if (fail.code != NE_NOERROR) { fprintf(fpout, "Error from nag_tsa_multi_diff (g13dlc).\n%s\n", fail.message); exit_status = 1; goto END; } fprintf(fpout, "\n"); fprintf(fpout, " Transformed/Differenced series\n"); fprintf(fpout, " ------------------------------\n"); for (i = 1; i <= k; ++i) { fprintf(fpout, "\n"); fprintf(fpout, " Series %2ld\n", i); fprintf(fpout, " -----------\n"); fprintf(fpout, "\n"); fprintf(fpout, " Number of differenced values = %6ld\n", nd); fprintf(fpout, "\n"); for (j = 1; j <= nd; ++j) { fprintf(fpout, "%10.3f", W(i, j)); if (j % 8 == 0 || j == nd) fprintf(fpout, "\n"); } } } } END: if (fpin != stdin) fclose(fpin); if (fpout != stdout) fclose(fpout); if (tr) NAG_FREE(tr); if (delta) NAG_FREE(delta); if (w) NAG_FREE(w); if (z) NAG_FREE(z); if (id) NAG_FREE(id); return exit_status; }