// c05zd Example Program Text // C# version, NAG Copyright 2008 using System; using NagLibrary; using System.Globalization; namespace NagDotNetExamples { public class C05ZDE { static void Main(String[] args) { StartExample(); } public static void StartExample() { try { const int m = 15; const int n = 3; int i, mode; double[] err = new double[m]; double[,] fjac = new double[m, n]; double[] fvec = new double[m]; double[] fvecp = new double[m]; double[] x = new double[n]; double[] xp = new double[n]; int ifail; Console.WriteLine("c05zd Example Program Results"); // x[0] = 9.20e-1; x[1] = 1.30e-1; x[2] = 5.40e-1; mode = 1; // // C05.c05za(m, n, x, fvec, fjac, xp, fvecp, mode, err, out ifail); C05.c05zd(mode, m, n, x, fvec, fjac, xp, fvecp, err, out ifail); // fcn(m, n, x, fvec, fjac, m, 1); fcn(m, n, x, fvec, fjac, m, 2); fcn(m, n, xp, fvecp, fjac, m, 1); // Console.WriteLine(""); Console.WriteLine(" {0}", " fvec at x = "); for (i = 1; i <= n; i++) { Console.Write(" {0, 10:f4}{1}", x[i - 1], i%3==0?"\n":""); } Console.WriteLine(""); Console.WriteLine(""); for (i = 1; i <= m; i++) { Console.Write(" {0,10:f4}{1}", fvec[i - 1],i%3==0?"\n":""); } Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine(" {0}", " fvecp at xp = "); for (i = 1; i <= n; i++) { Console.Write(" {0,10:f4}", xp[i - 1]); } Console.WriteLine(""); Console.WriteLine(""); for (i = 1; i <= m; i++) { Console.Write(" {0,10:f4}{1}", fvecp[i - 1], i % 3 == 0 ? "\n" : ""); } Console.WriteLine(""); // mode = 2; // C05.c05zd( mode,m, n, x, fvec, fjac, xp, fvecp, err,out ifail); // Console.WriteLine(""); Console.WriteLine(" {0}", " err"); Console.WriteLine(""); for (i = 1; i <= m; i++) { Console.Write(" {0,10:f4}{1}", err[i - 1], i % 3 == 0 ? "\n" : ""); } Console.WriteLine(""); // // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } Console.WriteLine(""); } // public static void fcn(int m, int n, double[] x, double[] fvec, double[,] fjac, int ldfjac, int iflag) { double tmp1, tmp2, tmp3, tmp4; int i = 0; double[] y = new double[15] { 1.40e-1, 1.80e-1, 2.20e-1, 2.50e-1, 2.90e-1, 3.20e-1, 3.50e-1, 3.90e-1, 3.70e-1, 5.80e-1, 7.30e-1, 9.60e-1, 1.340e0, 2.10e0, 4.390e0 }; if (iflag != 2) { for (i = 1; i <= m; i++) { tmp1 = (double)i; tmp2 = m + 1 - i; tmp3 = (double)tmp1; if (i > (m + 1) / 2) { tmp3 = (double)tmp2; } fvec[i - 1] = y[i - 1] - (x[0] + tmp1 / (x[1] * tmp2 + x[2] * tmp3)); } } else { for (i = 1; i <= m; i++) { tmp1 = (double)i; tmp2 = m + 1 - i; // // Error introduced into next statement for illustration. // Corrected statement should read tmp3 = tmp1. // tmp3 = (double)tmp2; if (i > (m + 1) / 2) { tmp3 = (double)tmp2; } tmp4 = ((x[1] * tmp2 + x[2] * tmp3)) * ((x[1] * tmp2 + x[2] * tmp3)); fjac[i - 1, 0] = -1.00e0; fjac[i - 1, 1] = tmp1 * tmp2 / tmp4; fjac[i - 1, 2] = tmp1 * tmp3 / tmp4; } } } } }