// f08nb Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class F08NBE { static string datafile = "ExampleData/f08nbe.d"; static void Main(String[] args) { if (args.Length == 1) { datafile = args[0]; } StartExample(); } public static void StartExample() { try { DataReader sr = new DataReader(datafile); Complex eig= new Complex(0.0,0.0); double abnrm, eps, erbnd, rcnd, tol; int i, ihi, ilo, info, j, n; Console.WriteLine("f08nb Example Program Results"); // Skip heading in data file sr.Reset(); sr.Reset(); n = int.Parse(sr.Next()); double[,] a = new double[n, n]; double[] rconde = new double[n]; double[] rcondv = new double[n]; double[] scale = new double[n]; double[,] vl = new double[n, n]; double[,] vr = new double[n, n]; double[] wi = new double[n]; double[] wr = new double[n]; if (n > 1) { // // Read the matrix A from data file // sr.Reset(); for (i = 1 ; i <= n ; i++) { for (j = 1 ; j <= n ; j++) { a[i - 1 , j - 1] = double.Parse(sr.Next(), CultureInfo.InvariantCulture); } } // // Solve the eigenvalue problem // F08.f08nb("Balance", "Vectors (left)", "Vectors (right)", "Both reciprocal condition numbers", n, a, wr, wi, vl, vr, out ilo, out ihi, scale, out abnrm, rconde, rcondv, out info); // if (info < 0) { return; } if (info == 0) { // // Compute the machine precision // eps = X02.x02aj(); tol = eps * abnrm; // // Print the eigenvalues and vectors, and associated condition // number and bounds // for (j = 1 ; j <= n ; j++) { // // Print information on jth eigenvalue // Console.WriteLine(""); if (wi[j - 1] == 0.00e0) { Console.WriteLine(" {0}{1,2}{2}{3,11:e4}","Eigenvalue(",j,") = ",wr[j - 1]); } else { eig = new Complex(wr[j - 1], wi[j - 1]); Console.WriteLine(" {0}{1,2}{2}({3,11:e4},{3,11:e4})","Eigenvalue(",j,") = ",eig.re, eig.im); } rcnd = rconde[j - 1]; Console.WriteLine(""); Console.WriteLine(" {0}{1,8:e1}","Reciprocal condition number = ",rcnd); if (rcnd > 0.00e0) { erbnd = tol / rcnd; Console.WriteLine(" {0}{1,8:e1}","Error bound = ",erbnd); } else { Console.WriteLine(" {0}","Error bound is infinite"); } // // Print information on jth eigenvector // Console.WriteLine(""); Console.WriteLine(" {0}{1,2}{2}","Eigenvector(",j,")"); if (wi[j - 1] == 0.00e0) { for (i = 1 ; i <= n ; i++) { Console.WriteLine(" {0, 11:e4}", vr[i - 1 , j - 1]); } Console.WriteLine(); } else if (wi[j - 1] > 0.00e0) { for (i = 1 ; i <= n ; i++) { Console.WriteLine(" ({0, 11:e4}, {1, 11:e4})", vr[i - 1 , j - 1], vr[i - 1 , j + 1 - 1]); } Console.WriteLine(); } else { for (i = 1 ; i <= n ; i++) { Console.WriteLine("({0, 11:e4}, {1, 11:e4})", vr[i - 1 , j - 1 - 1], -vr[i - 1 , j - 1]); } Console.WriteLine(); } rcnd = rcondv[j - 1]; Console.WriteLine(""); Console.WriteLine(" {0}{1,8:e1}","Reciprocal condition number = ",rcnd); if (rcnd > 0.00e0) { erbnd = tol / rcnd; Console.WriteLine(" {0}{1,8:e1}","Error bound = ",erbnd); } else { Console.WriteLine(" {0}","Error bound is infinite"); } } } else { Console.WriteLine(""); Console.WriteLine(" {0}{1,4}","Failure in DGEEVX. INFO = ",info); } // // Print workspace information // } else { Console.WriteLine(""); Console.WriteLine(" {0}","n < 1."); } // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }