1
#include <gsl/gsl_vector.h>
2
#include <gsl/gsl_matrix.h>
13
char * name() { return "ExponentialSaturation"; }
15
char * function() { return "b1*(1-exp(-b2*x))"; }
17
char * parameters() { return "b1,b2"; }
19
double function_eval(double x, double * params)
21
return params[0]*(1-exp(-params[1]*x));
24
int function_f(const gsl_vector * params, void * void_data, gsl_vector * f)
26
struct data * d = (struct data*) void_data;
27
double b1 = gsl_vector_get(params, 0);
28
double b2 = gsl_vector_get(params, 1);
30
for (i=0; i<d->n; i++)
31
gsl_vector_set(f, i, (b1*(1-exp(-b2*d->X[i])) - d->Y[i])/d->sigma[i]);
35
int function_df(const gsl_vector * params, void * void_data, gsl_matrix *J)
37
struct data * d = (struct data*) void_data;
38
double b1 = gsl_vector_get(params, 0);
39
double b2 = gsl_vector_get(params, 1);
41
for (i=0; i<d->n; i++) {
43
gsl_matrix_set(J, i, 0, (1-exp(-b2*x)));
44
gsl_matrix_set(J, i, 1, b1*x*exp(-b2*x));
49
int function_fdf(const gsl_vector * params, void * void_data, gsl_vector * f, gsl_matrix * J)
51
function_f(params, void_data, f);
52
function_df(params, void_data, J);
56
double function_d(const gsl_vector * params, void * void_data)
58
struct data * d = (struct data*) void_data;
59
gsl_vector * f = gsl_vector_alloc(d->n);
63
function_f(params, void_data, f);
64
for (i=0; i<d->n; i++)
65
result += pow(gsl_vector_get(f, i), 2);