// g13bb Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class G13BBE { static string datafile = "ExampleData/g13bbe.d"; static void Main(String[] args) { if (args.Length == 1) { datafile = args[0]; } StartExample(); } public static void StartExample() { try { DataReader sr = new DataReader(datafile); double a1, a2, cx, cy, rms; int i, idd, ii, ij, iqxd, iwa, j, k, n, nb, ni, nmr, npar, nparx, nst, nx, ny; int[] isf = new int[4]; int[] mrx = new int[7]; int ifail; Console.WriteLine("g13bb Example Program Results"); // Skip heading in data file iqxd = 0; idd = 0; sr.Reset(); sr.Reset(); nx = int.Parse(sr.Next()); double[] x = new double[nx]; Console.WriteLine(""); if (nx > 0) { sr.Reset(); for (i = 1; i <= nx; i++) { x[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } // Read univariate ARIMA for series sr.Reset(); for (i = 1; i <= 7; i++) { mrx[i - 1] = int.Parse(sr.Next()); } sr.Reset(); cx = double.Parse(sr.Next(), CultureInfo.InvariantCulture); nparx = mrx[0] + mrx[2] + mrx[3] + mrx[5]; iqxd = mrx[2] + mrx[5] * mrx[6]; int ifv = Math.Max(1, iqxd); ny = nx + iqxd; int ist = mrx[4-1] + mrx[7-1] + mrx[2-1] + mrx[5-1] + mrx[3-1] + Math.Max(mrx[1-1],mrx[6-1]*mrx[7-1]); double[] st = new double[ist]; double [] y = new double[ny]; double [] fva = new double[ifv]; double [] fsd = new double[ifv]; double[] parx = new double[nparx]; if (iqxd != 0) { nmr = 10; } else { nmr = 3; } int[] mr = new int[nmr]; if (nparx > 0) { sr.Reset(); for (i = 1; i <= nparx; i++) { parx[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } // Read model by which to filter series sr.Reset(); for (i = 1; i <= 3; i++) { mr[i - 1] = int.Parse(sr.Next()); } npar = mr[1] + mr[2] + 1; double [] par = new double[npar+nparx]; if (npar > 0) { sr.Reset(); for (i = 1; i <= npar; i++) { par[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } // Initially backforecast qy values // Reverse series in situ n = nx / 2; ni = (int)nx; for (i = 1; i <= n; i++) { a1 = x[i - 1]; a2 = x[ni - 1]; x[i - 1] = a2; x[ni - 1] = a1; ni = ni - 1; } idd = mrx[1] + mrx[4]; // Possible sign reversal for ARIMA constant if ((idd % 2) != 0) { cx = -cx; } // (3) Calculate number of backforecasts required if (iqxd != 0) { G13.g13aj(mrx, parx, cx, 0, x, nx, out rms, st, out nst, iqxd, fva, fsd, isf, out ifail); } // Move backforecasts to start of Y array j = (int)iqxd; for (i = 1; i <= iqxd; i++) { y[i - 1] = fva[j - 1]; j = j - 1; } // Move series into Y j = iqxd + 1; k = (int)nx; for (i = 1; i <= nx; i++) { if (j > ny) { goto L160; } y[j - 1] = x[k - 1]; j = j + 1; k = k - 1; } } // Move ARIMA for series into mr for (i = 1; i <= 7; i++) { mr[3 + i - 1] = mrx[i - 1]; } // Move parameters of ARIMA for y into par for (i = 1; i <= nparx; i++) { par[npar + i - 1] = parx[i - 1]; } npar = npar + nparx; // Move constant and reset sign reversal cy = (double)cx; if ((idd % 2) != 0) { cy = -cy; } // Set parameters for call to filter method g13bb iwa = mr[2] + mr[3] + mr[4] + (mr[6] + mr[7]) * mr[9]; iwa = npar + iwa * (iwa + 2); nb = ny + Math.Max(mr[0] + mr[1], mr[2]); double[] b = new double[nb]; if (nb > 1) { // // Filter series by call to g13bb G13.g13bb(y, ny, mr, nmr, par, cy, b, out ifail); // Console.WriteLine(" {0}", " Original Filtered"); Console.WriteLine(" {0}", " Backforecasts y-series series"); if (iqxd != 0) { ij = -iqxd; for (i = 1; i <= iqxd; i++) { Console.WriteLine(" {0,8}{1,17:f1}{2,16:f1}", ij, y[i - 1], b[i - 1]); ij = ij + 1; } Console.WriteLine(""); Console.WriteLine(" {0}", " Filtered Filtered Filtered Filtered"); Console.WriteLine(" {0}", " series series series series"); Console.WriteLine(""); for (i = iqxd + 1; i <= ny; i += 4) { for (ii = i; ii <= Math.Min(ny, i + 3); ii++) { Console.Write(" {0}{1, 10:f1}{2}", ii - iqxd, b[ii - 1], i%4==0?"\n":""); } Console.WriteLine(""); ; } } } } } L160: ; // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }