// g02de Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class G02DEE { static string datafile = "ExampleData/g02dee.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 rss, rsst, tol; int i, idf, indx, ip, irank, j, m, n; bool svd = false; string mean = "", weight = ""; int ifail; Console.WriteLine("g02de Example Program Results"); // Skip heading in data file sr.Reset(); sr.Reset(); n = int.Parse(sr.Next()); m = int.Parse(sr.Next()); int maxip = m+1; weight = sr.Next(); mean = sr.Next(); double[] b = new double[maxip]; double[] cov = new double[maxip * (maxip + 1) / 2]; double[] p = new double[maxip * (maxip + 2)]; double[,] q = new double[n, maxip + 1]; double[] se = new double[maxip]; double[] wt = new double[n]; double[,] x = new double[n, m]; if (n >= 1 && m >= 1) { if ((weight == "W") || (weight == "w")) { for (i = 1; i <= n; i++) { sr.Reset(); for (j = 1; j <= m; j++) { x[i - 1, j - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } q[i - 1, 0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); wt[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } else { for (i = 1; i <= n; i++) { sr.Reset(); for (j = 1; j <= m; j++) { x[i - 1, j - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } q[i - 1, 0] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } // Set tolerance tol = 0.0000010e0; ip = 0; if ((mean == "M") || (mean == "m")) { double[] x_column = new double[n]; for (int i_ind = 0; i_ind < n; i_ind++) x_column[i_ind] = 1.0; // // G02.g02de(weight, n, ip, q, p, wt, x_column, out rss, tol, out ifail); // if (ifail < 0) { Console.WriteLine(""); Console.WriteLine("** g02de failed with ifail = {0,5}", ifail); goto L100; } else { ip = 1; } } sr.Reset(); indx = int.Parse(sr.Next()); while ( indx > 0) { // double[] x_column = new double[n]; for (int i_ind = 0; i_ind < n; i_ind++) x_column[i_ind] = x[i_ind, indx - 1]; G02.g02de(weight, n, ip, q, p, wt, x_column, out rss, tol, out ifail); // if (ifail == 0) { ip = ip + 1; Console.WriteLine(""); Console.WriteLine(" {0}{1,4}{2}", "Variable", indx, " added"); rsst = 0.00e0; // G02.g02dd(n, ip, q, ref rsst, out idf, b, se, cov, out svd, out irank, p, tol, out ifail); // if (ifail == 0) { if (svd) { Console.WriteLine(" {0}", "Model not of full rank"); Console.WriteLine(""); } Console.WriteLine(" {0}{1,13:e4}", "Residual sum of squares = ", rsst); Console.WriteLine(" {0}{1,4}", "Degrees of freedom = ", idf); Console.WriteLine(""); Console.WriteLine(" {0}", "Variable Parameter estimate Standard error"); Console.WriteLine(""); for (j = 1; j <= ip; j++) { Console.WriteLine(" {0,6}{1,20:e4}{2,20:e4}", j, b[j - 1], se[j - 1]); } } else { Console.WriteLine(""); Console.WriteLine("** g02dd failed with ifail = {0,5}", ifail); goto L100; } } else if (ifail == 3) { Console.WriteLine(" {0}", " * New variable not added *"); } else { Console.WriteLine(""); Console.WriteLine("** g02de failed with ifail = {0,5}", ifail); goto L100; } sr.Reset(); indx = int.Parse(sr.Next()); } } L100: ; // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }