/* nag_1d_quad_brkpts (d01alc) Example Program. * * Copyright 1991 Numerical Algorithms Group. * * Mark 2, 1991. * Mark 6 revised, 2000. * Mark 7 revised, 2001. */ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif static double NAG_CALL f(double x); #ifdef __cplusplus } #endif int main(void) { Integer exit_status = 0; double a, b; double epsabs, abserr, epsrel, brkpts[1], result; Integer nbrkpts; Nag_QuadProgress qp; Integer max_num_subint; NagError fail; INIT_FAIL(fail); printf("nag_1d_quad_brkpts (d01alc) Example Program Results\n"); nbrkpts = 1; epsabs = 0.0; epsrel = 0.001; a = 0.0; b = 1.0; max_num_subint = 200; brkpts[0] = 1.0/7.0; /* nag_1d_quad_brkpts (d01alc). * One-dimensional adaptive quadrature, allowing for * singularities at specified points */ nag_1d_quad_brkpts(f, a, b, nbrkpts, brkpts, epsabs, epsrel, max_num_subint, &result, &abserr, &qp, &fail); printf("a - lower limit of integration = %9.4f\n", a); printf("b - upper limit of integration = %9.4f\n", b); printf("epsabs - absolute accuracy requested = %11.2e\n", epsabs); printf("epsrel - relative accuracy requested = %11.2e\n\n", epsrel); printf("brkpts[0] - given break-point = %9.4f\n", brkpts[0]); if (fail.code != NE_NOERROR) printf("Error from nag_1d_quad_brkpts (d01alc) %s\n", fail.message); if (fail.code != NE_INT_ARG_LT && fail.code != NE_2_INT_ARG_LE && fail.code != NE_ALLOC_FAIL && fail.code != NE_NO_LICENCE) { /* Free memory used by qp pointers */ NAG_FREE(qp.sub_int_beg_pts); NAG_FREE(qp.sub_int_end_pts); NAG_FREE(qp.sub_int_result); NAG_FREE(qp.sub_int_error); } if (fail.code != NE_INT_ARG_LT && fail.code != NE_2_INT_ARG_LE && fail.code != NE_QUAD_BRKPTS_INVAL && fail.code != NE_ALLOC_FAIL && fail.code != NE_NO_LICENCE) { printf("result - approximation to the integral = %10.5f\n", result); printf("abserr - estimate of the absolute error = %11.2e\n", abserr); printf("qp.fun_count - number of function evaluations = %4ld\n", qp.fun_count); printf("qp.num_subint - number of subintervals used = %4ld\n", qp.num_subint); } else { exit_status = 1; goto END; } END: return exit_status; } static double NAG_CALL f(double x) { double a; a = FABS(x-1.0/7.0); return (a != 0.0)?pow(a, -0.5):0.0; }