/* nag_opt_one_var_no_deriv (e04abc) Example Program. * * Copyright 1998 Numerical Algorithms Group. * * Mark 5, 1998. * Mark 7 revised, 2001. * Mark 8 revised, 2004. * */ #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif static void NAG_CALL funct(double xc, double *fc, Nag_Comm *comm); #ifdef __cplusplus } #endif static void NAG_CALL funct(double xc, double *fc, Nag_Comm *comm) { *fc = sin(xc) / xc; } /* funct */ int main(void) { Integer exit_status = 0, max_fun; NagError fail; Nag_Comm comm; double a, b, e1, e2, f, x; INIT_FAIL(fail); printf( "nag_opt_one_var_no_deriv (e04abc) Example Program Results\n\n"); /* e1 and e2 are set to zero so that nag_opt_one_var_no_deriv (e04abc) will * reset them to their default values. */ e1 = 0.0; e2 = 0.0; /* The minimum is known to lie in the range (3.5, 5.0) */ a = 3.5; b = 5.0; /* Allow 30 calls of funct */ max_fun = 30; /* nag_opt_one_var_no_deriv (e04abc). * Minimizes a function of one variable, using function values only. */ nag_opt_one_var_no_deriv(funct, e1, e2, &a, &b, max_fun, &x, &f, &comm, &fail); if (fail.code != NE_NOERROR) { printf("Error from nag_opt_one_var_no_deriv (e04abc).\n%s\n", fail.message); exit_status = 1; goto END; } printf("The minimum lies in the interval %7.5f to %7.5f.\n", a, b); printf("Its estimated position is %7.5f,\n", x); printf("where the function value is %13.4e.\n", f); printf("%1ld function evaluations were required.\n", comm.nf); END: return exit_status; }