// c05qc Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class C05QCE { static void Main(String[] args) { StartExample(); } public static void StartExample() { try { const int n=9; //C05.C05NC_FCN fcnC05NC = new C05.C05NC_FCN(fcn); C05.C05QC_FCN fcnC05QC = new C05.C05QC_FCN(fcn); double epsfcn, factor, fnorm, xtol; int j, maxfev, ml, mode, mu, nfev, nprint; double[] diag = new double[n]; double[,] fjac = new double[n, n]; double[] fvec = new double[n]; double[] qtf = new double[n]; double[] r = new double[n*(n+1)/2]; double[] x = new double[n]; int ifail; Console.WriteLine("c05qc Example Program Results"); Console.WriteLine(""); // The following starting values provide a rough solution. for (j = 1 ; j <= n ; j++) { x[j - 1] = -1.00e0; } xtol = Math.Sqrt(X02.x02aj()); for (j = 1 ; j <= n ; j++) { diag[j - 1] = 1.00e0; } maxfev = 2000; ml = 1; mu = 1; epsfcn = 0.00e0; mode = 2; factor = 100.00e0; nprint = 0; // /* C05.c05nc(fcnC05NC, n, x, fvec, xtol, maxfev, ml, mu, epsfcn,diag, mode, factor, nprint, out nfev, fjac, r, qtf, out ifail);*/ C05.c05qc(fcnC05QC, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, mode, diag, factor, nprint, out nfev, fjac, r, qtf, out ifail); // if (ifail == 0) { fnorm = F06.f06ej(n, fvec, 1, out ifail); Console.WriteLine(" {0}{1,12:e4}","Final 2-norm of the residuals =",fnorm); Console.WriteLine(""); Console.WriteLine(" {0}{1,10}","Number of function evaluations =",nfev); Console.WriteLine(""); Console.WriteLine(" {0}","Final approximate solution"); Console.WriteLine(""); for (j = 1 ; j <= n ; j++) { Console.Write(" {0,10:f4}{1}", x[j - 1], j % 3 == 0 ? "\n" : ""); } Console.WriteLine(""); } else if (ifail < 0) { Console.WriteLine(""); Console.WriteLine("** c05qc failed with ifail = {0,5}", ifail); } else { Console.WriteLine(" {0}{1,5}","ifail = ",ifail); if (ifail >= (2)) { Console.WriteLine(""); Console.WriteLine(" {0}","Approximate solution"); Console.WriteLine(""); for (j = 1 ; j <= n ; j++) { Console.Write(" {0, 10:f4}", x[j - 1]); } Console.WriteLine(""); } } // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } Console.WriteLine(""); } // // public static void fcn (int n, double[] x, double[] fvec, ref int iflag) { const double one=1.00e0; const double two=2.00e0; const double three=3.00e0; int k=0; if (iflag == 0) { // // Insert print statements here when nprint is positive. // } else { for (k = 1 ; k <= n ; k++) { fvec[k - 1] = (three - two * x[k - 1]) * x[k - 1] + one; if (k > 1) { fvec[k - 1] = fvec[k - 1] - x[k - 2]; } if (k < n) { fvec[k - 1] = fvec[k - 1] - two * x[k]; } } } } } }