aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fit.c50
1 files changed, 37 insertions, 13 deletions
diff --git a/src/fit.c b/src/fit.c
index 46ba01c..cd77928 100644
--- a/src/fit.c
+++ b/src/fit.c
@@ -28,6 +28,7 @@ typedef struct fitParams {
event *ev;
double epsrel;
int fast;
+ int print;
} fitParams;
/* In order to start the fitter close to the minimum, we first do a series of
@@ -101,19 +102,20 @@ double nll(unsigned int n, const double *x, double *grad, void *params)
long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000;
- printf("%5zu %10.2f %7.2f %7.2f %7.2f %5.2f %5.2f %5.2f %5.2f %5.2f f() = %7.3e took %lld ms\n",
- iter++,
- x[0],
- x[1],
- x[2],
- x[3],
- x[4],
- x[5],
- x[6],
- x[7],
- x[8],
- fval,
- elapsed);
+ if (fpars->print)
+ printf("%5zu %10.2f %7.2f %7.2f %7.2f %5.2f %5.2f %5.2f %5.2f %5.2f f() = %7.3e took %lld ms\n",
+ iter++,
+ x[0],
+ x[1],
+ x[2],
+ x[3],
+ x[4],
+ x[5],
+ x[6],
+ x[7],
+ x[8],
+ fval,
+ elapsed);
return fval;
}
@@ -204,6 +206,7 @@ int fit_event(event *ev, double *xopt, double *fmin)
fitParams fpars;
double x[9], ss[9], lb[9], ub[9], fval, n, qhs_sum, x0[9], T0, Tmin;
int rv;
+ struct timeval tv_start, tv_stop;
nlopt_opt opt = nlopt_create(NLOPT_LN_BOBYQA, 9);
nlopt_set_min_objective(opt,nll,&fpars);
@@ -287,6 +290,7 @@ int fit_event(event *ev, double *xopt, double *fmin)
* tolerance on the numerical integration to 10%. */
fpars.epsrel = 1e-1;
fpars.fast = 1;
+ fpars.print = 0;
nlopt_set_ftol_abs(opt, 1.0);
nlopt_set_maxeval(opt, 10);
@@ -323,7 +327,26 @@ int fit_event(event *ev, double *xopt, double *fmin)
x[6] = guess_t0(ev,x+1);
+ gettimeofday(&tv_start, NULL);
rv = nlopt_optimize(opt,x,&fval);
+ gettimeofday(&tv_stop, NULL);
+
+ long long elapsed = (tv_stop.tv_sec - tv_start.tv_sec)*1000 + (tv_stop.tv_usec - tv_start.tv_usec)/1000;
+
+ printf("%5zu/%5zu %10.2f %7.2f %7.2f %7.2f %5.2f %5.2f %5.2f %5.2f %5.2f f() = %7.3e took %lld ms\n",
+ i+1,
+ sizeof(startingParameters)/sizeof(startingParameters[0]),
+ x[0],
+ x[1],
+ x[2],
+ x[3],
+ x[4],
+ x[5],
+ x[6],
+ x[7],
+ x[8],
+ fval,
+ elapsed);
if (i == 0 || fval < *fmin) {
*fmin = fval;
@@ -360,6 +383,7 @@ int fit_event(event *ev, double *xopt, double *fmin)
/* Now, we do the "real" minimization. */
fpars.epsrel = 1e-4;
fpars.fast = 0;
+ fpars.print = 1;
nlopt_set_ftol_abs(opt, 1e-5);
nlopt_set_maxeval(opt, 1000);