22 #ifndef KJB_CPP_GSL_MULTIFIT_H
23 #define KJB_CPP_GSL_MULTIFIT_H
41 #include <boost/function/function1.hpp>
44 #include <gsl/gsl_multifit_nlin.h>
46 #warning "Gnu Scientific Library is absent, yet essential to this program."
54 #define gsl_multifit_fdfsolver_lmsder ((void*)0)
55 #define gsl_multifit_fdfsolver_lmder ((void*)0)
56 #define gsl_multifit_fdfsolver_alloc(x,z) 0
57 #define gsl_set_error_handler_off() (0)
70 #define gsl_multifit_fsolver_alloc(x,z) 0
89 struct basic_Gsl_multifit_fdf {
94 basic_Gsl_multifit_fdf(
103 ETX_2( 0 == n,
"basic_Gsl_multifit_fdf(): zero observations" );
104 ETX_2( 0 == p,
"basic_Gsl_multifit_fdf(): Zero dimensions" );
105 ETX_2( 00 == p,
"basic_Gsl_multifit_fdf(): Memory alloc failed" );
108 ~basic_Gsl_multifit_fdf()
110 gsl_multifit_fdfsolver_free( p );
113 void swap( basic_Gsl_multifit_fdf& that )
121 basic_Gsl_multifit_fdf(
const basic_Gsl_multifit_fdf& );
122 basic_Gsl_multifit_fdf();
123 basic_Gsl_multifit_fdf& operator=(
const basic_Gsl_multifit_fdf& );
126 basic_Gsl_multifit_fdf m_fit;
131 boost::function1<double, const gsl_vector*> boost_f_;
146 : m_fit( type, data_count, x0 ? x0 -> size : 0 ),
148 m_initialized(
false),
169 : m_fit( type, data_count, size),
171 m_initialized(
false),
191 GSL_ETX( gsl_multifit_fdfsolver_set( m_fit.p, f, x0 ) );
192 m_initialized =
true;
206 return m_fit.num_obs;
226 int rc = gsl_multifit_fdfsolver_iterate( m_fit.p );
236 return gsl_multifit_fdfsolver_position( m_fit.p );
264 return gsl_multifit_test_delta( m_fit.p->dx, m_fit.p->x, epsabs, epsrel );
275 if(m_gradient == NULL)
278 gsl_multifit_gradient(m_fit.p->J, m_fit.p->f, *m_gradient);
279 return gsl_multifit_test_gradient(*m_gradient, epsabs);
297 m_fit.swap( that.m_fit );
300 swap( m_verbose, that.m_verbose );
301 swap( m_gradient, that.m_gradient );
313 bool oldv = m_verbose;
Definition: gsl_vector.h:35
size_t size
Definition: gsl_vector.h:36
bool verbosity()
Definition: gsl_multifit.h:321
gsl_vector * position() const
query the current best argfit of the solver
Definition: gsl_multifit.h:233
double * p
Definition: gsl_vector.h:36
size_t num_observations() const
Definition: gsl_multifit.h:203
Object thrown when an argument is of the wrong size or dimensions.
Definition: l_exception.h:426
void gsl_multifit_fdfsolver
Definition: gsl_multifit.h:52
#define gsl_multifit_fdfsolver_lmsder
Definition: gsl_multifit.h:54
int n
Definition: gsl_multifit.h:62
int iterate()
Perform one iteration of the solver.
Definition: gsl_multifit.h:218
#define KJB_THROW(ex)
Definition: l_exception.h:46
GSL utility stuff to help those using the C++ wrapper on GSL code.
bool verbosity(bool v)
Alter the verbosity attribute of the object.
Definition: gsl_multifit.h:311
void gsl_multifit_fsolver
Definition: gsl_multifit.h:68
Gsl_multifit_fdf(size_t data_count, size_t size, const gsl_multifit_fdfsolver_type *type=gsl_multifit_fdfsolver_lmsder)
Definition: gsl_multifit.h:164
void gsl_iterate_EPE(int gsl_error_code)
On error, print a GSL iteration error message (like EPE)
Definition: gsl_util.cpp:40
Definition: gsl_multifit.h:81
#define GSL_ETX(gsl_expr)
Definition: gsl_util.h:37
double(* f)(const gsl_vector *, void *, gsl_vector *)
Definition: gsl_multifit.h:59
Gsl_multifit_fdf(const gsl_multifit_fdfsolver_type *type, gsl_multifit_function_fdf *f, const gsl_vector *x0, size_t data_count, bool verbosity=true)
TODO: document.
Definition: gsl_multifit.h:138
void swap(Gsl_multifit_fdf &that)
Swap the contents of this solver and another (fast).
Definition: gsl_multifit.h:290
RAII wrapper for GSL vector objects.
Definition: gsl_vector.h:78
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
~Gsl_multifit_fdf()
Definition: gsl_multifit.h:180
void swap(kjb::Gsl_Multimin_fdf &m1, kjb::Gsl_Multimin_fdf &m2)
Swap two wrapped multimin objects.
Definition: gsl_multimin.h:693
#define ETX_2(a, msg)
Definition: l_exception.h:78
C++ wrapper on GSL vector class to prevent resource leaks.
Definition: gsl_multifit.h:58
int test_gradient(double epsabs=1e-6) const
Definition: gsl_multifit.h:272
void gsl_multifit_fsolver_type
Definition: gsl_multifit.h:67
void(* fdf)(const gsl_vector *, void *, gsl_vector *, gsl_matrix *)
Definition: gsl_multifit.h:61
void initialize(gsl_multifit_function_fdf *f, const gsl_vector *x0)
Definition: gsl_multifit.h:185
gsl_matrix * jacobian() const
Definition: gsl_multifit.h:240
void gsl_multifit_fdfsolver_type
Definition: gsl_multifit.h:51
#define gsl_multifit_fdfsolver_alloc(x, z)
Definition: gsl_multifit.h:56
Support for error handling exception classes in libKJB.
Object thrown when a program lacks required resources or libraries.
Definition: l_exception.h:539
Definition: gsl_multifit.h:53
int test_delta(double epsabs, double epsrel) const
Definition: gsl_multifit.h:260
size_t p
Definition: gsl_multifit.h:63
size_t dim() const
Definition: gsl_multifit.h:196
Object thrown when computation fails somehow during execution.
Definition: l_exception.h:321
void * params
Definition: gsl_multifit.h:64
void(* df)(const gsl_vector *, void *, gsl_matrix *)
Definition: gsl_multifit.h:60
const gsl_vector * min() const
query the current best min value of the function to be minimized
Definition: gsl_multifit.h:249