using System; using System.Text; using System.Runtime.InteropServices; using NagLibrary; public class NagD01Functions { public static void Main() { nag_declarations.nag_1d_quad_gen_1_f_DELEGATE F = new nag_declarations.nag_1d_quad_gen_1_f_DELEGATE(f); nag_declarations.Nag_QuadProgress qp = new nag_declarations.Nag_QuadProgress(); double a = 0.0; double b = Math.PI * 2.0; double epsabs = 0.0; double epsrel = 0.0001; int max_num_subint = 200; double result = 0.0; double abserr = 0.0; nag_declarations.Nag_User user_comm = new nag_declarations.Nag_User(); nag_declarations.NagError fail = new nag_declarations.NagError(); fail.message = new byte[512]; Encoding enc = Encoding.ASCII; /* nag_1d_quad_gen_1 (d01sjc). * One-dimensional adaptive quadrature, allowing for badly * behaved integrands, thread-safe */ nag_declarations.nag_1d_quad_gen_1(F, a, b, epsabs, epsrel, max_num_subint, ref result, ref abserr, ref qp, ref user_comm, ref fail); if (fail.code != 0) { Console.WriteLine("Error from nag_1d_quad_gen_1 (d01sjc):"); Console.WriteLine(enc.GetString(fail.message)); } else { Console.WriteLine("Approximation to the integral = {0, 9:f5}", result); Console.WriteLine("Estimate of the absolute error = {0, 9:e2}", abserr); Console.WriteLine("Number of function evaluations = {0, 4:d}", qp.fun_count); Console.WriteLine("Number of subintervals used = {0, 4:d}", qp.num_subint); } } public static double f(double x, ref nag_declarations.Nag_User comm) { double retval = 0; retval = (x * Math.Sin(x * 30.0) / Math.Sqrt(1.0 - x * x / (Math.PI * Math.PI * 4.0))); return retval; } }