/* nag_opt_one_var_deriv (e04bbc) Example Program. * * Copyright 1998 Numerical Algorithms Group. * * Mark 5, 1998. * Mark 7 revised, 2001. * Mark 8 revised, 2004. * */ #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif static void NAG_CALL funct(double xc, double *fc, double *gc, Nag_Comm *comm); #ifdef __cplusplus } #endif static void NAG_CALL funct(double xc, double *fc, double *gc, Nag_Comm *comm) { *fc = sin(xc) / xc; *gc = (cos(xc) - *fc) / xc; } /* funct */ int main(int argc, char *argv[]) { FILE *fpout; Integer exit_status = 0, max_fun; NagError fail; Nag_Comm comm; double a, b, e1, e2, f, g, x; INIT_FAIL(fail); /* Check for command-line IO options */ fpout = nag_example_file_io(argc, argv, "-results", NULL); fprintf(fpout, "nag_opt_one_var_deriv (e04bbc) 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_deriv (e04bbc). * Minimizes a function of one variable, requires first * derivatives */ nag_opt_one_var_deriv(funct, e1, e2, &a, &b, max_fun, &x, &f, &g, &comm, &fail); if (fail.code != NE_NOERROR) { fprintf(fpout, "Error from nag_opt_one_var_deriv (e04bbc).\n%s\n", fail.message); exit_status = 1; goto END; } fprintf(fpout, "The minimum lies in the interval %7.5f to %7.5f.\n", a, b); fprintf(fpout, "Its estimated position is %7.5f,\n", x); fprintf(fpout, "where the function value is %13.4e\n", f); fprintf(fpout, "and the gradient is %13.4e.\n", g); fprintf(fpout, "%1ld function evaluations were required.\n", comm.nf); END: if (fpout != stdout) fclose(fpout); return exit_status; }