NAG Library Manual, Mark 30
Interfaces:  FL   CL   CPP   AD 

NAG CL Interface Introduction
Example description
/* nag_tsa_multi_spectrum_daniell (g13cdc) Example Program.
 *
 * Copyright 2024 Numerical Algorithms Group.
 *
 * Mark 30.0, 2024.
 *
 */

#include <nag.h>
#include <stdio.h>

#define L 80
#define KC 8 * L
#define NXYMAX 300

int main(void) {

  Complex *g;
  Integer exit_status = 0, i, is, j, kc = KC, l = L, mw, ng, nxy;
  NagError fail;
  double pw, pxy, *x = 0, *y = 0;

  INIT_FAIL(fail);

  printf("nag_tsa_multi_spectrum_daniell (g13cdc) Example Program Results\n");

  /* Skip heading in data file */
  scanf("%*[^\n] ");
  scanf("%" NAG_IFMT " ", &nxy);
  if (nxy > 0 && nxy <= NXYMAX) {
    if (!(x = NAG_ALLOC(KC, double)) || !(y = NAG_ALLOC(KC, double))) {
      printf("Allocation failure\n");
      exit_status = -1;
      goto END;
    }
    for (i = 1; i <= nxy; ++i)
      scanf("%lf ", &x[i - 1]);
    for (i = 1; i <= nxy; ++i)
      scanf("%lf ", &y[i - 1]);

    /* Set parameters for call to nag_tsa_multi_spectrum_daniell (g13cdc) */
    /* Mean correction and 10 percent taper */
    pxy = 0.1;
    /* Window shape parameter and zero covariance at lag 16 */
    pw = 0.5;
    mw = 16;
    /* Alignment shift of 3 */
    is = 3;

    /* nag_tsa_multi_spectrum_daniell (g13cdc).
     * Multivariate time series, smoothed sample cross spectrum
     * using spectral smoothing by the trapezium frequency
     * (Daniell) window
     */
    nag_tsa_multi_spectrum_daniell(nxy, Nag_Mean, pxy, mw, is, pw, l, kc, x, y,
                                   &g, &ng, &fail);
    if (fail.code != NE_NOERROR) {
      printf("Error from nag_tsa_multi_spectrum_daniell (g13cdc).\n%s\n",
             fail.message);
      exit_status = 1;
      goto END;
    }

    printf("\n                       Returned sample spectrum\n");
    printf("\n       Real  Imaginary       Real  Imaginary   "
           "    Real  Imaginary\n");
    printf("       part     part         part     part     "
           "    part     part\n\n");
    for (j = 1; j <= ng; ++j)
      printf("%5" NAG_IFMT "%8.4f%9.4f%s",
             /* nag_complex_real (a02bbc).
              * Real part of a complex number
              */
             j, nag_complex_real(g[j - 1]), a02bcc(g[j - 1]),
             (j % 3 == 0 ? "\n" : ""));
    printf("\n");
    NAG_FREE(g);
  }
END:
  NAG_FREE(x);
  NAG_FREE(y);
  return exit_status;
}