/* nag_kalman_sqrt_filt_cov_invar(g13ebc) Example Program * * Copyright 1993 Numerical Algorithms Group * * Mark 3, 1993 * Mark 7, revised, 2001. * */ #include #include #include #include #include #include typedef enum {read, print} ioflag; static void ex1(void); static void ex2(void); int main(void) { ex1(); ex2(); return EXIT_SUCCESS; } #define NMAX 10 #define MMAX 10 #define PMAX 10 #define TRADIM 10 static void ex1(void) { /* simple example (matrices A and C are supplied in lower observer Hessenberg form) */ double a[NMAX][TRADIM], b[NMAX][TRADIM], c[PMAX][TRADIM], k[NMAX][TRADIM], q[MMAX][TRADIM], r[PMAX][TRADIM], s[NMAX][TRADIM], h[NMAX][TRADIM]; Integer i, j, m, n, p, istep; double tol; Integer nmax, mmax, pmax, tradim; Vprintf("g13ebc Example 1 Program Results\n"); /* Skip the heading in the data file */ Vscanf(" %*[^\n]"); nmax = NMAX; mmax = MMAX; pmax = PMAX; tradim = TRADIM; Vscanf("%ld%ld%ld%lf",&n,&m,&p,&tol); if (n<=0 || m<=0 || p<=0 || n>nmax || m>mmax || p>pmax) { Vfprintf(stderr, "One of n m or p is out of range " "n = %ld, m = %ld, p = %ld\n", n, m, p); exit(EXIT_FAILURE); } /* Read data */ for (i=0; inmax || m>mmax || p>pmax) { Vfprintf(stderr, "One of n m or p is out of range " "n = %ld, m = %ld, p = %ld\n", n, m, p); exit(EXIT_FAILURE); } mat_io(n, n, &se[0][0], tradim, read, ""); mat_io(n, n, &a[0][0], tradim, read, ""); mat_io(n, m, &b[0][0], tradim, read, ""); if (q) mat_io(m, m, &q[0][0], tradim, read,""); mat_io(p, n, &c[0][0], tradim, read, ""); mat_io(p, p, &r[0][0], tradim, read, ""); for (i=0; i