00001 #ifndef NLINALG_H 00002 #define NLINALG_H 00003 00004 #include <boost/numeric/ublas/vector.hpp> 00005 #include "mimasconfig.h" 00006 00007 #ifdef HAVE_LIBMINPACK 00008 00009 namespace mimas { 00010 00028 struct lmdif_t 00029 { 00031 typedef boost::numeric::ublas::vector< double > Vector; 00032 00034 Vector operator()( const Vector &_A, 00035 void (*fnc)(int *m, int *n, double *x, double *fvec, 00036 int *iflag), 00037 int nb, int maxfev, double tolerance, int mode, int factor, 00038 double epsfcn) const; 00039 }; 00040 00060 inline 00061 lmdif_t::Vector lmdif ( const lmdif_t::Vector &A, 00062 void (*fnc)(int *m, int *n, double *x, 00063 double *fvec, int *iflag), 00064 int nb, 00065 int maxfev, 00066 double tolerance = 1e-7, 00067 int mode = 1, 00068 int factor = 1, 00069 double epsfcn = 0) 00070 { 00071 return lmdif_t()( A, fnc, nb, maxfev, tolerance, mode, factor, epsfcn ); 00072 } 00073 00074 00077 struct lmdif1_t 00078 { 00080 typedef boost::numeric::ublas::vector< double > Vector; 00081 00083 Vector operator()( const Vector &_A, 00084 void (*fnc)(int *m, int *n, double *x, double *fvec, 00085 int *iflag), 00086 int nb, double tolerance) const; 00087 }; 00088 00101 inline 00102 lmdif1_t::Vector lmdif1 ( const lmdif1_t::Vector &A, 00103 void (*fnc)(int *m, int *n, double *x, 00104 double *fvec, int *iflag), 00105 int nb, 00106 double tolerance = 1e-7) 00107 { 00108 return lmdif1_t()( A, fnc, nb, tolerance ); 00109 } 00110 00113 } 00114 00115 #endif 00116 00117 #endif 00118