using System; using System.Runtime.InteropServices; using NagCFunctionsAPI; public class NagD01Functions { public static void nag_1d_quad_gen (NAG_D01AJC_FUN f , double a, double b, double epsabs, double epsrel, int max_num_subint, ref double result, ref double abserr, ref Nag_QuadProgress qp, ref string error_message, ref int fail_code) { NagError fail = new NagError(); fail.char_array = new char [512]; NagFunctions.d01ajc(f, a, b, epsabs, epsrel, max_num_subint, ref result, ref abserr, ref qp, ref fail); string tmpstring = new string(fail.char_array); error_message = tmpstring; fail_code = fail.code; } public static void Main() { NAG_D01AJC_FUN F = new NAG_D01AJC_FUN (f); Nag_QuadProgress qp = new Nag_QuadProgress(); double a = 0.0; double pi = 3.14159265358979323846264338328; double b = pi*2.0; double epsabs = 0.0; double epsrel = 0.0001; int max_num_subint = 200; double result=0.0; double abserr=0.0; string message = ""; int fail_code = 0; nag_1d_quad_gen(F, a, b, epsabs, epsrel, max_num_subint, ref result, ref abserr, ref qp, ref message, ref fail_code); if (fail_code != 0) { Console.WriteLine(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) { double pi = 3.14159265358979323846264338328; double retval=0; retval = (x*Math.Sin(x*30.0)/Math.Sqrt(1.0-x*x/(pi*pi*4.0))); return retval; } }