// g13am Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class G13AME { static string datafile = "ExampleData/g13ame.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 ad, dv; int i, itype, ival, k, mode, n, nf, p; int ifail; Console.WriteLine("g13am Example Program Results"); // // Skip headings in data file k = 0; sr.Reset(); // Read in the initial arguments and check array sizes sr.Reset(); mode = int.Parse(sr.Next()); itype = int.Parse(sr.Next()); n = int.Parse(sr.Next()); nf = int.Parse(sr.Next()); double[] fse = new double[nf]; double[] fv = new double[nf]; double[] param = new double[4]; double[] res = new double[n]; double[] y = new double[n]; double[] yhat = new double[n]; if (n < 1 || nf < 1 ) { Console.WriteLine(" ** Problem size is too small."); goto L80; } sr.Reset(); for (i = 1; i <= n; i++) { y[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } // Read in the itype dependent arguments (skipping headings) if (itype == 1) { sr.Reset(); param[0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); p = 0; ival = 1; } else if (itype == 2) { sr.Reset(); param[0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); p = 0; ival = 2; } else if (itype == 3) { sr.Reset(); param[0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[2] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); p = 0; ival = 2; } else { sr.Reset(); param[0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[2] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); param[3] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); p = int.Parse(sr.Next()); ival = p + 2; if (p < 1) { Console.WriteLine("Problem size is too small."); goto L80; } } // Read in the mode dependent arguments (skipping headings) double[] init = new double[ival]; double[] r = new double[p+13]; if (mode == 0) { // User supplied initial values sr.Reset(); for (i = 1; i <= ival; i++) { init[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } else if (mode == 1) { // Continuing from a previously saved R sr.Reset(); for (i = 1; i <= p + 13; i++) { r[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } else if (mode == 2) { // Initial values calculated from first K observations sr.Reset(); k = int.Parse(sr.Next()); } // // Call the library method G13.g13am(mode, itype, p, param, n, y, k, init, nf, fv, fse, yhat, res, out dv, out ad, r, out ifail); if (ifail != 0) { Console.WriteLine("** g13am failed with ifail = {0,5}", ifail); goto L80; } // Display the output Console.WriteLine(""); Console.WriteLine(" {0}", "Initial values used:"); for (i = 1; i <= ival; i++) { Console.WriteLine("{0,4} {1,12:f3} ", i, init[i - 1]); } Console.WriteLine(""); Console.WriteLine("{0}{1,12:e4}", "Mean Deviation = ", dv); Console.WriteLine("{0}{1,12:e4}", "Absolute Deviation = ", ad); Console.WriteLine(""); Console.WriteLine(" {0}", " Observed 1-Step"); Console.WriteLine(" {0}", " Period Values Forecast Residual"); Console.WriteLine(""); for (i = 1; i <= n; i++) { Console.WriteLine("{0,4} {1,12:f3} {2,12:f3} {3,12:f3}", i, y[i - 1], yhat[i - 1], res[i - 1]); } Console.WriteLine(""); Console.WriteLine(" {0}", " Forecast Standard"); Console.WriteLine(" {0}", " Period Values Errors"); Console.WriteLine(""); for (i = 1; i <= nf; i++) { Console.WriteLine("{0,4} {1,12:f3} {2,12:f3} ", n + i, fv[i - 1], fse[i - 1]); } // L80: ; // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }