#include #include double func(double x) { return fabs((x-1.0) * (x-2.0)*(x-3.0)) + 5.0; } int main(void) { void mnbrak(double *ax, double *bx, double *cx, double *fa, double *fb, double *fc, double (*func)(double)); double golden(double ax, double bx, double cx, double (*f)(double), double tol, double *xmin); int i; double ax,bx,cx,fa,fb,fc; double fmin,xmin,tol; tol = 1.e-8; for (i=1;i<=10;i++) { ax=i; bx=(i+0.1); mnbrak(&ax,&bx,&cx,&fa,&fb,&fc,func); fmin = golden(ax,bx,cx,func,tol,&xmin); printf("%14s %12s %12s\n","a","b","c"); printf("%3s %14.6lf %12.6lf %12.6lf\n","x",ax,bx,cx); printf("%3s %14.6lf %12.6lf %12.6lf\n","f",fa,fb,fc); printf("%3s %14.6lf %3s %14.6lf\n","xmin",xmin,"fmin",fmin); } return 0; }