File indexing completed on 2025-02-21 10:03:51
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #ifndef __GSL_MULTIFIT_NLINEAR_H__
0022 #define __GSL_MULTIFIT_NLINEAR_H__
0023
0024 #include <stdlib.h>
0025 #include <gsl/gsl_types.h>
0026 #include <gsl/gsl_math.h>
0027 #include <gsl/gsl_vector.h>
0028 #include <gsl/gsl_matrix.h>
0029 #include <gsl/gsl_permutation.h>
0030
0031 #undef __BEGIN_DECLS
0032 #undef __END_DECLS
0033 #ifdef __cplusplus
0034 # define __BEGIN_DECLS extern "C" {
0035 # define __END_DECLS }
0036 #else
0037 # define __BEGIN_DECLS
0038 # define __END_DECLS
0039 #endif
0040
0041 __BEGIN_DECLS
0042
0043 typedef enum
0044 {
0045 GSL_MULTIFIT_NLINEAR_FWDIFF,
0046 GSL_MULTIFIT_NLINEAR_CTRDIFF
0047 } gsl_multifit_nlinear_fdtype;
0048
0049
0050
0051
0052 typedef struct
0053 {
0054 int (* f) (const gsl_vector * x, void * params, gsl_vector * f);
0055 int (* df) (const gsl_vector * x, void * params, gsl_matrix * df);
0056 int (* fvv) (const gsl_vector * x, const gsl_vector * v, void * params,
0057 gsl_vector * fvv);
0058 size_t n;
0059 size_t p;
0060 void * params;
0061 size_t nevalf;
0062 size_t nevaldf;
0063 size_t nevalfvv;
0064 } gsl_multifit_nlinear_fdf;
0065
0066
0067 typedef struct
0068 {
0069 const char *name;
0070 void * (*alloc) (const void * params, const size_t n, const size_t p);
0071 int (*init) (const void * vtrust_state, void * vstate);
0072 int (*preloop) (const void * vtrust_state, void * vstate);
0073 int (*step) (const void * vtrust_state, const double delta,
0074 gsl_vector * dx, void * vstate);
0075 int (*preduction) (const void * vtrust_state, const gsl_vector * dx,
0076 double * pred, void * vstate);
0077 void (*free) (void * vstate);
0078 } gsl_multifit_nlinear_trs;
0079
0080
0081 typedef struct
0082 {
0083 const char *name;
0084 int (*init) (const gsl_matrix * J, gsl_vector * diag);
0085 int (*update) (const gsl_matrix * J, gsl_vector * diag);
0086 } gsl_multifit_nlinear_scale;
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101 typedef struct
0102 {
0103 const char *name;
0104 void * (*alloc) (const size_t n, const size_t p);
0105 int (*init) (const void * vtrust_state, void * vstate);
0106 int (*presolve) (const double mu, const void * vtrust_state, void * vstate);
0107 int (*solve) (const gsl_vector * f, gsl_vector * x,
0108 const void * vtrust_state, void * vstate);
0109 int (*rcond) (double * rcond, void * vstate);
0110 void (*free) (void * vstate);
0111 } gsl_multifit_nlinear_solver;
0112
0113
0114 typedef struct
0115 {
0116 const gsl_multifit_nlinear_trs *trs;
0117 const gsl_multifit_nlinear_scale *scale;
0118 const gsl_multifit_nlinear_solver *solver;
0119 gsl_multifit_nlinear_fdtype fdtype;
0120 double factor_up;
0121 double factor_down;
0122 double avmax;
0123 double h_df;
0124 double h_fvv;
0125 } gsl_multifit_nlinear_parameters;
0126
0127 typedef struct
0128 {
0129 const char *name;
0130 void * (*alloc) (const gsl_multifit_nlinear_parameters * params,
0131 const size_t n, const size_t p);
0132 int (*init) (void * state, const gsl_vector * wts,
0133 gsl_multifit_nlinear_fdf * fdf, const gsl_vector * x,
0134 gsl_vector * f, gsl_matrix * J, gsl_vector * g);
0135 int (*iterate) (void * state, const gsl_vector * wts,
0136 gsl_multifit_nlinear_fdf * fdf, gsl_vector * x,
0137 gsl_vector * f, gsl_matrix * J, gsl_vector * g,
0138 gsl_vector * dx);
0139 int (*rcond) (double * rcond, void * state);
0140 double (*avratio) (void * state);
0141 void (*free) (void * state);
0142 } gsl_multifit_nlinear_type;
0143
0144
0145 typedef struct
0146 {
0147 const gsl_vector * x;
0148 const gsl_vector * f;
0149 const gsl_vector * g;
0150 const gsl_matrix * J;
0151 const gsl_vector * diag;
0152 const gsl_vector * sqrt_wts;
0153 const double *mu;
0154 const gsl_multifit_nlinear_parameters * params;
0155 void *solver_state;
0156 gsl_multifit_nlinear_fdf * fdf;
0157 double *avratio;
0158 } gsl_multifit_nlinear_trust_state;
0159
0160 typedef struct
0161 {
0162 const gsl_multifit_nlinear_type * type;
0163 gsl_multifit_nlinear_fdf * fdf ;
0164 gsl_vector * x;
0165 gsl_vector * f;
0166 gsl_vector * dx;
0167 gsl_vector * g;
0168 gsl_matrix * J;
0169 gsl_vector * sqrt_wts_work;
0170 gsl_vector * sqrt_wts;
0171 size_t niter;
0172 gsl_multifit_nlinear_parameters params;
0173 void *state;
0174 } gsl_multifit_nlinear_workspace;
0175
0176 gsl_multifit_nlinear_workspace *
0177 gsl_multifit_nlinear_alloc (const gsl_multifit_nlinear_type * T,
0178 const gsl_multifit_nlinear_parameters * params,
0179 size_t n, size_t p);
0180
0181 void gsl_multifit_nlinear_free (gsl_multifit_nlinear_workspace * w);
0182
0183 gsl_multifit_nlinear_parameters gsl_multifit_nlinear_default_parameters(void);
0184
0185 int
0186 gsl_multifit_nlinear_init (const gsl_vector * x,
0187 gsl_multifit_nlinear_fdf * fdf,
0188 gsl_multifit_nlinear_workspace * w);
0189
0190 int gsl_multifit_nlinear_winit (const gsl_vector * x,
0191 const gsl_vector * wts,
0192 gsl_multifit_nlinear_fdf * fdf,
0193 gsl_multifit_nlinear_workspace * w);
0194
0195 int
0196 gsl_multifit_nlinear_iterate (gsl_multifit_nlinear_workspace * w);
0197
0198 double
0199 gsl_multifit_nlinear_avratio (const gsl_multifit_nlinear_workspace * w);
0200
0201 int
0202 gsl_multifit_nlinear_driver (const size_t maxiter,
0203 const double xtol,
0204 const double gtol,
0205 const double ftol,
0206 void (*callback)(const size_t iter, void *params,
0207 const gsl_multifit_nlinear_workspace *w),
0208 void *callback_params,
0209 int *info,
0210 gsl_multifit_nlinear_workspace * w);
0211
0212 gsl_matrix *
0213 gsl_multifit_nlinear_jac (const gsl_multifit_nlinear_workspace * w);
0214
0215 const char *
0216 gsl_multifit_nlinear_name (const gsl_multifit_nlinear_workspace * w);
0217
0218 gsl_vector *
0219 gsl_multifit_nlinear_position (const gsl_multifit_nlinear_workspace * w);
0220
0221 gsl_vector *
0222 gsl_multifit_nlinear_residual (const gsl_multifit_nlinear_workspace * w);
0223
0224 size_t
0225 gsl_multifit_nlinear_niter (const gsl_multifit_nlinear_workspace * w);
0226
0227 int
0228 gsl_multifit_nlinear_rcond (double *rcond, const gsl_multifit_nlinear_workspace * w);
0229
0230 const char *
0231 gsl_multifit_nlinear_trs_name (const gsl_multifit_nlinear_workspace * w);
0232
0233 int gsl_multifit_nlinear_eval_f(gsl_multifit_nlinear_fdf *fdf,
0234 const gsl_vector *x,
0235 const gsl_vector *swts,
0236 gsl_vector *y);
0237
0238 int gsl_multifit_nlinear_eval_df(const gsl_vector *x,
0239 const gsl_vector *f,
0240 const gsl_vector *swts,
0241 const double h,
0242 const gsl_multifit_nlinear_fdtype fdtype,
0243 gsl_multifit_nlinear_fdf *fdf,
0244 gsl_matrix *df, gsl_vector *work);
0245
0246 int
0247 gsl_multifit_nlinear_eval_fvv(const double h,
0248 const gsl_vector *x,
0249 const gsl_vector *v,
0250 const gsl_vector *f,
0251 const gsl_matrix *J,
0252 const gsl_vector *swts,
0253 gsl_multifit_nlinear_fdf *fdf,
0254 gsl_vector *yvv, gsl_vector *work);
0255
0256
0257 int
0258 gsl_multifit_nlinear_covar (const gsl_matrix * J, const double epsrel,
0259 gsl_matrix * covar);
0260
0261
0262 int
0263 gsl_multifit_nlinear_test (const double xtol, const double gtol,
0264 const double ftol, int *info,
0265 const gsl_multifit_nlinear_workspace * w);
0266
0267
0268 int
0269 gsl_multifit_nlinear_df(const double h, const gsl_multifit_nlinear_fdtype fdtype,
0270 const gsl_vector *x, const gsl_vector *wts,
0271 gsl_multifit_nlinear_fdf *fdf,
0272 const gsl_vector *f, gsl_matrix *J, gsl_vector *work);
0273
0274
0275 int
0276 gsl_multifit_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v,
0277 const gsl_vector *f, const gsl_matrix *J,
0278 const gsl_vector *swts, gsl_multifit_nlinear_fdf *fdf,
0279 gsl_vector *fvv, gsl_vector *work);
0280
0281
0282 GSL_VAR const gsl_multifit_nlinear_type * gsl_multifit_nlinear_trust;
0283
0284
0285 GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lm;
0286 GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_lmaccel;
0287 GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_dogleg;
0288 GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_ddogleg;
0289 GSL_VAR const gsl_multifit_nlinear_trs * gsl_multifit_nlinear_trs_subspace2D;
0290
0291
0292 GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_levenberg;
0293 GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_marquardt;
0294 GSL_VAR const gsl_multifit_nlinear_scale * gsl_multifit_nlinear_scale_more;
0295
0296
0297 GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_cholesky;
0298 GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_mcholesky;
0299 GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_qr;
0300 GSL_VAR const gsl_multifit_nlinear_solver * gsl_multifit_nlinear_solver_svd;
0301
0302 __END_DECLS
0303
0304 #endif