1 /* expfit.c -- model functions for exponential + background */
10 expb_f (const gsl_vector * x, void *data,
13 size_t n = ((struct data *)data)->n;
14 double *y = ((struct data *)data)->y;
15 double *sigma = ((struct data *) data)->sigma;
17 double A = gsl_vector_get (x, 0);
18 double lambda = gsl_vector_get (x, 1);
19 double b = gsl_vector_get (x, 2);
23 for (i = 0; i < n; i++)
25 /* Model Yi = A * exp(-lambda * i) + b */
27 double Yi = A * exp (-lambda * t) + b;
28 gsl_vector_set (f, i, (Yi - y[i])/sigma[i]);
35 expb_df (const gsl_vector * x, void *data,
38 size_t n = ((struct data *)data)->n;
39 double *sigma = ((struct data *) data)->sigma;
41 double A = gsl_vector_get (x, 0);
42 double lambda = gsl_vector_get (x, 1);
46 for (i = 0; i < n; i++)
48 /* Jacobian matrix J(i,j) = dfi / dxj, */
49 /* where fi = (Yi - yi)/sigma[i], */
50 /* Yi = A * exp(-lambda * i) + b */
51 /* and the xj are the parameters (A,lambda,b) */
54 double e = exp(-lambda * t);
55 gsl_matrix_set (J, i, 0, e/s);
56 gsl_matrix_set (J, i, 1, -t * A * e/s);
57 gsl_matrix_set (J, i, 2, 1/s);
63 expb_fdf (const gsl_vector * x, void *data,
64 gsl_vector * f, gsl_matrix * J)