// g13be Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class G13BEE { static string datafile = "ExampleData/g13bee.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 d, s; int dp, i, inc, itc, j, kef, kfc, kpriv, kzef, kzsp, mx, ncd, nce, ncf, ndf, ndv, nit, npara, ncg, nser, nsttf, nxxy, qp, qx, smx ; double[] zsp = new double[4]; int[] mr = new int[7]; int ifail; Console.WriteLine("g13be Example Program Results"); // Skip heading in data file sr.Reset(); sr.Reset(); kzef = int.Parse(sr.Next()); kfc = int.Parse(sr.Next()); nxxy = int.Parse(sr.Next()); nser = int.Parse(sr.Next()); kef = int.Parse(sr.Next()); nit = int.Parse(sr.Next()); kzsp = int.Parse(sr.Next()); int[,] mt = new int[4, nser]; if (nxxy > 0 && nser > 0) { if (kzsp != 0) { sr.Reset(); for (int zsplen = 0; zsplen < zsp.Length; zsplen++) { zsp[zsplen] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } sr.Reset(); for (i = 1; i <= 7; i++) { mr[i - 1] = int.Parse(sr.Next()); } for (i = 1; i <= 4; i++) { sr.Reset(); for (j = 1; j <= nser; j++) { mt[i - 1, j - 1] = int.Parse(sr.Next()); } } npara = 0; ncg = 0; qx = 0; smx = 0; ncf = nser; inc = 1; for ( i = 1; i<= nser-1; i++) { npara = npara + mt[2-1,i-1] + mt[3-1,i-1]; if (mt[4-1,i-1]>1) { ncg = ncg + mt[0,i-1]+ mt[1,i-1]+ mt[2,i-1]; if (mt[4-1,i-1]==3) { mx = Math.Max(mt[1-1,i-1]+mt[2-1,i-1],mt[3-1,i-1]); qx = Math.Max(qx,mx); smx = smx + mx; } } else if (mt[4-1,i-1]==1 && kef==3) { if (mt[3-1,i-1]>0) { ncf = ncf + 1; } inc = inc + 1; } } npara = npara + mr[0] + mr[2] + mr[3] + mr[5] + nser; // Calculate size of arrays int isttf = mr[4-1]*mr[7-1] + mr[2-1] + mr[5-1]*mr[7-1] + mr[3-1] + Math.Max(mr[1-1],mr[6-1]*mr[7-1]) + ncg; qp = mr[3-1] + mr[6-1]*mr[7-1]; dp = mr[2-1] + mr[5-1]*mr[7-1]; if (mr[3-1]>0 && kef>1) { inc = inc + 1; } if (kfc>0 && kef==3) { inc = inc + 1; } qx = qp; ncd = npara + kfc + smx; if (mr[1-1]>0) { ncf = ncf + inc; } if (mr[3-1]>0) { ncf = ncf + inc; } if (mr[4-1]>0) { ncf = ncf + inc; } if (mr[6-1]>0) { ncf = ncf + inc; } if (qx>0) { ncf = ncf + 1; } if (kfc>0) { ncf = ncf + 1; } ncd = ncd + qx; nce = nxxy + dp + 6*qx; double[,] cm = new double[npara, npara]; double[] para = new double[npara]; double[] res = new double[nxxy]; double[] sd = new double[npara]; double[] sttf = new double[isttf]; double[,] xxy = new double[nxxy, nser]; if (npara > 0) { sr.Reset(); for (i = 1; i <= npara; i++) { para[i - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } for (i = 1; i <= nxxy; i++) { sr.Reset(); for (j = 1; j <= nser; j++) { xxy[i - 1, j - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } // Set kpriv to 1 to obtain monitoring information * kpriv = 0; // G13.g13be(mr, nser, mt, para, npara, kfc, nxxy, xxy, kef, nit, kzsp, zsp, out itc, sd, cm, out s, out d, out ndf, kzef, res, sttf, out nsttf, kpriv, out ifail); // if (ifail != 0) { Console.WriteLine(""); Console.WriteLine(" {0}{1,4}", "g13be fails. ifail =", ifail); } if ((((ifail == 0) || (ifail == 8)) || (ifail == 9)) || (ifail == 11)) { Console.WriteLine(""); Console.WriteLine(" {0}{1,4}", "The number of iterations carried out is", itc); Console.WriteLine(""); Console.WriteLine(" {0}", "Final values of the parameters and their standard deviations"); Console.WriteLine(""); Console.WriteLine(" {0}", " I PARA(I) SD"); Console.WriteLine(""); for (i = 1; i <= npara; i++) { Console.WriteLine(" {0,4}{1,20:f6}{2,20:f6}", i, para[i - 1], sd[i - 1]); } Console.WriteLine(""); Console.WriteLine(" {0}", "The correlation matrix is"); Console.WriteLine(""); for (i = 1; i <= npara; i++) { for (j = 1; j <= npara; j++) { Console.Write(" {0, 10:f4}", cm[i - 1, j - 1]); } Console.WriteLine(""); ; } Console.WriteLine(""); ; Console.WriteLine(""); Console.WriteLine(" {0}", "The residuals and the z and n values are"); Console.WriteLine(""); Console.WriteLine(" {0}", " I RES(I) z(t) n(t)"); Console.WriteLine(""); ndv = nxxy - mr[1] - mr[4] * mr[6]; for (i = 1; i <= nxxy; i++) { if (i <= ndv) { Console.Write(" {0,4}", i); Console.Write(" {0, 15:f3}", res[i - 1]); for (j = 1; j <= nser; j++) { Console.Write(" {0, 15:f3}", xxy[i - 1, j - 1]); } Console.WriteLine(""); ; } else { Console.WriteLine(" {0, 4}", i); for (j = 1; j <= nser; j++) { Console.Write(" {0, 15:f3}", xxy[i - 1, j - 1]); } Console.WriteLine(""); ; } } if ((mr[1] != 0) || (mr[4] != 0)) { Console.WriteLine(""); Console.WriteLine(" {0}", "** Note that the residuals relate to differenced values **"); } Console.WriteLine(""); Console.WriteLine(" {0}{1,4}{2}", "The state set consists of", nsttf, " values"); Console.WriteLine(""); for (i = 1; i <= nsttf; i++) { Console.Write(" {0, 10:f4}", sttf[i - 1] ); } Console.WriteLine(""); ; Console.WriteLine(""); Console.WriteLine(" {0}{1,4}", "The number of degrees of freedom is", ndf); } } } // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }