#include <stdio.h> #define N 2 double func(double x[]) { double temp; temp=x[1]-x[0]*x[0]; return 100*temp*temp+(1.0-x[0])*(1.0-x[0]); } int main () { double func(double x[]); double fminval,xmin[N],x0[N],rel_tol, abs_tol; int numfuneval, status; x0[0] = -1.2; x0[1]=1.0; /* Plot a 2 dimensional graph of the function for which the minimum will be found */ double funcp(double x, y) { double temp; temp=y-x*x; return 100*temp*temp+(1.0-x)*(1.0-x); } fplotxyz(funcp, 0.9, 1.1, 0.9, 1.1, 50,50,"100*(x-y*y)*(x-y*y)+(1.0-x)*(1.0-x)","x","y","z"); status = fminimums(&fminval, xmin, func,x0); printf("status = %d\n", status); printf("fminval = %f\n", fminval); printf("xmin[0] = %f\n", xmin[0]); printf("xmin[1] = %f\n", xmin[1]); rel_tol = 1.0e-3; /* not default value */ abs_tol = 1.0e-3; /* not default value */ numfuneval = 250; /* not default value */ status = fminimums(&fminval, xmin, func,x0,rel_tol, abs_tol,numfuneval); printf("status = %d\n", status); printf("fminval = %f\n", fminval); printf("xmin[0] = %f\n", xmin[0]); printf("xmin[1] = %f\n", xmin[1]); }
status = 0 fminval = 0.000000 xmin[0] = 1.000000 xmin[1] = 1.000000 status = 0 fminval = 0.000600 xmin[0] = 0.975573 xmin[1] = 0.951548