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 #ifndef __GSL_MULTILARGE_NLINEAR_H__
0021 #define __GSL_MULTILARGE_NLINEAR_H__
0022
0023 #include <stdlib.h>
0024 #include <gsl/gsl_types.h>
0025 #include <gsl/gsl_math.h>
0026 #include <gsl/gsl_vector.h>
0027 #include <gsl/gsl_matrix.h>
0028 #include <gsl/gsl_permutation.h>
0029 #include <gsl/gsl_blas.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_MULTILARGE_NLINEAR_FWDIFF,
0046 GSL_MULTILARGE_NLINEAR_CTRDIFF
0047 } gsl_multilarge_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) (CBLAS_TRANSPOSE_t TransJ, const gsl_vector * x,
0056 const gsl_vector * u, void * params, gsl_vector * v,
0057 gsl_matrix * JTJ);
0058 int (* fvv) (const gsl_vector * x, const gsl_vector * v, void * params,
0059 gsl_vector * fvv);
0060 size_t n;
0061 size_t p;
0062 void * params;
0063 size_t nevalf;
0064 size_t nevaldfu;
0065 size_t nevaldf2;
0066 size_t nevalfvv;
0067 } gsl_multilarge_nlinear_fdf;
0068
0069
0070 typedef struct
0071 {
0072 const char *name;
0073 void * (*alloc) (const void * params, const size_t n, const size_t p);
0074 int (*init) (const void * vtrust_state, void * vstate);
0075 int (*preloop) (const void * vtrust_state, void * vstate);
0076 int (*step) (const void * vtrust_state, const double delta,
0077 gsl_vector * dx, void * vstate);
0078 int (*preduction) (const void * vtrust_state, const gsl_vector * dx,
0079 double * pred, void * vstate);
0080 void (*free) (void * vstate);
0081 } gsl_multilarge_nlinear_trs;
0082
0083
0084 typedef struct
0085 {
0086 const char *name;
0087 int (*init) (const gsl_matrix * JTJ, gsl_vector * diag);
0088 int (*update) (const gsl_matrix * JTJ, gsl_vector * diag);
0089 } gsl_multilarge_nlinear_scale;
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 typedef struct
0103 {
0104 const char *name;
0105 void * (*alloc) (const size_t n, const size_t p);
0106 int (*init) (const void * vtrust_state, void * vstate);
0107 int (*presolve) (const double mu, const void * vtrust_state, void * vstate);
0108 int (*solve) (const gsl_vector * g, gsl_vector * x,
0109 const void * vtrust_state, void * vstate);
0110 int (*rcond) (double * rcond, const gsl_matrix * JTJ, void * vstate);
0111 int (*covar) (const gsl_matrix * JTJ, gsl_matrix * covar, void * vstate);
0112 void (*free) (void * vstate);
0113 } gsl_multilarge_nlinear_solver;
0114
0115
0116 typedef struct
0117 {
0118 const gsl_multilarge_nlinear_trs *trs;
0119 const gsl_multilarge_nlinear_scale *scale;
0120 const gsl_multilarge_nlinear_solver *solver;
0121 gsl_multilarge_nlinear_fdtype fdtype;
0122 double factor_up;
0123 double factor_down;
0124 double avmax;
0125 double h_df;
0126 double h_fvv;
0127 size_t max_iter;
0128 double tol;
0129 } gsl_multilarge_nlinear_parameters;
0130
0131 typedef struct
0132 {
0133 const char *name;
0134 void * (*alloc) (const gsl_multilarge_nlinear_parameters * params,
0135 const size_t n, const size_t p);
0136 int (*init) (void * state, const gsl_vector * wts,
0137 gsl_multilarge_nlinear_fdf * fdf, const gsl_vector * x,
0138 gsl_vector * f, gsl_vector * g, gsl_matrix * JTJ);
0139 int (*iterate) (void * state, const gsl_vector * wts,
0140 gsl_multilarge_nlinear_fdf * fdf, gsl_vector * x,
0141 gsl_vector * f, gsl_vector * g, gsl_matrix * JTJ,
0142 gsl_vector * dx);
0143 int (*rcond) (double * rcond, const gsl_matrix * JTJ, void * state);
0144 int (*covar) (const gsl_matrix * JTJ, gsl_matrix * covar, void * state);
0145 double (*avratio) (void * state);
0146 void (*free) (void * state);
0147 } gsl_multilarge_nlinear_type;
0148
0149
0150 typedef struct
0151 {
0152 const gsl_vector * x;
0153 const gsl_vector * f;
0154 const gsl_vector * g;
0155 const gsl_matrix * JTJ;
0156 const gsl_vector * diag;
0157 const gsl_vector * sqrt_wts;
0158 const double *mu;
0159 const gsl_multilarge_nlinear_parameters * params;
0160 void *solver_state;
0161 gsl_multilarge_nlinear_fdf * fdf;
0162 double *avratio;
0163 } gsl_multilarge_nlinear_trust_state;
0164
0165 typedef struct
0166 {
0167 const gsl_multilarge_nlinear_type * type;
0168 gsl_multilarge_nlinear_fdf * fdf ;
0169 gsl_vector * x;
0170 gsl_vector * f;
0171 gsl_vector * dx;
0172 gsl_vector * g;
0173 gsl_matrix * JTJ;
0174 gsl_vector * sqrt_wts_work;
0175 gsl_vector * sqrt_wts;
0176 size_t n;
0177 size_t p;
0178 size_t niter;
0179 gsl_multilarge_nlinear_parameters params;
0180 void *state;
0181 } gsl_multilarge_nlinear_workspace;
0182
0183 gsl_multilarge_nlinear_workspace *
0184 gsl_multilarge_nlinear_alloc (const gsl_multilarge_nlinear_type * T,
0185 const gsl_multilarge_nlinear_parameters * params,
0186 size_t n, size_t p);
0187
0188 void gsl_multilarge_nlinear_free (gsl_multilarge_nlinear_workspace * w);
0189
0190 gsl_multilarge_nlinear_parameters gsl_multilarge_nlinear_default_parameters(void);
0191
0192 int
0193 gsl_multilarge_nlinear_init (const gsl_vector * x,
0194 gsl_multilarge_nlinear_fdf * fdf,
0195 gsl_multilarge_nlinear_workspace * w);
0196
0197 int gsl_multilarge_nlinear_winit (const gsl_vector * x,
0198 const gsl_vector * wts,
0199 gsl_multilarge_nlinear_fdf * fdf,
0200 gsl_multilarge_nlinear_workspace * w);
0201
0202 int
0203 gsl_multilarge_nlinear_iterate (gsl_multilarge_nlinear_workspace * w);
0204
0205 double
0206 gsl_multilarge_nlinear_avratio (const gsl_multilarge_nlinear_workspace * w);
0207
0208 int
0209 gsl_multilarge_nlinear_rcond (double * rcond, const gsl_multilarge_nlinear_workspace * w);
0210
0211 int
0212 gsl_multilarge_nlinear_covar (gsl_matrix * covar, gsl_multilarge_nlinear_workspace * w);
0213
0214 int
0215 gsl_multilarge_nlinear_driver (const size_t maxiter,
0216 const double xtol,
0217 const double gtol,
0218 const double ftol,
0219 void (*callback)(const size_t iter, void *params,
0220 const gsl_multilarge_nlinear_workspace *w),
0221 void *callback_params,
0222 int *info,
0223 gsl_multilarge_nlinear_workspace * w);
0224
0225 const char *
0226 gsl_multilarge_nlinear_name (const gsl_multilarge_nlinear_workspace * w);
0227
0228 gsl_vector *
0229 gsl_multilarge_nlinear_position (const gsl_multilarge_nlinear_workspace * w);
0230
0231 gsl_vector *
0232 gsl_multilarge_nlinear_residual (const gsl_multilarge_nlinear_workspace * w);
0233
0234 gsl_vector *
0235 gsl_multilarge_nlinear_step (const gsl_multilarge_nlinear_workspace * w);
0236
0237 size_t
0238 gsl_multilarge_nlinear_niter (const gsl_multilarge_nlinear_workspace * w);
0239
0240 const char *
0241 gsl_multilarge_nlinear_trs_name (const gsl_multilarge_nlinear_workspace * w);
0242
0243 int gsl_multilarge_nlinear_eval_f(gsl_multilarge_nlinear_fdf *fdf,
0244 const gsl_vector *x,
0245 const gsl_vector *swts,
0246 gsl_vector *y);
0247
0248 int
0249 gsl_multilarge_nlinear_eval_df(const CBLAS_TRANSPOSE_t TransJ,
0250 const gsl_vector *x,
0251 const gsl_vector *f,
0252 const gsl_vector *u,
0253 const gsl_vector *swts,
0254 const double h,
0255 const gsl_multilarge_nlinear_fdtype fdtype,
0256 gsl_multilarge_nlinear_fdf *fdf,
0257 gsl_vector *v,
0258 gsl_matrix *JTJ,
0259 gsl_vector *work);
0260
0261 int
0262 gsl_multilarge_nlinear_eval_fvv(const double h,
0263 const gsl_vector *x,
0264 const gsl_vector *v,
0265 const gsl_vector *f,
0266 const gsl_vector *swts,
0267 gsl_multilarge_nlinear_fdf *fdf,
0268 gsl_vector *yvv,
0269 gsl_vector *work);
0270
0271
0272 int
0273 gsl_multilarge_nlinear_test (const double xtol, const double gtol,
0274 const double ftol, int *info,
0275 const gsl_multilarge_nlinear_workspace * w);
0276
0277
0278 int
0279 gsl_multilarge_nlinear_df(const double h, const gsl_multilarge_nlinear_fdtype fdtype,
0280 const gsl_vector *x, const gsl_vector *wts,
0281 gsl_multilarge_nlinear_fdf *fdf,
0282 const gsl_vector *f, gsl_matrix *J, gsl_vector *work);
0283
0284
0285 int
0286 gsl_multilarge_nlinear_fdfvv(const double h, const gsl_vector *x, const gsl_vector *v,
0287 const gsl_vector *f, const gsl_matrix *J,
0288 const gsl_vector *swts, gsl_multilarge_nlinear_fdf *fdf,
0289 gsl_vector *fvv, gsl_vector *work);
0290
0291
0292 GSL_VAR const gsl_multilarge_nlinear_type * gsl_multilarge_nlinear_trust;
0293
0294
0295 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_lm;
0296 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_lmaccel;
0297 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_dogleg;
0298 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_ddogleg;
0299 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_subspace2D;
0300 GSL_VAR const gsl_multilarge_nlinear_trs * gsl_multilarge_nlinear_trs_cgst;
0301
0302
0303 GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_levenberg;
0304 GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_marquardt;
0305 GSL_VAR const gsl_multilarge_nlinear_scale * gsl_multilarge_nlinear_scale_more;
0306
0307
0308 GSL_VAR const gsl_multilarge_nlinear_solver * gsl_multilarge_nlinear_solver_cholesky;
0309 GSL_VAR const gsl_multilarge_nlinear_solver * gsl_multilarge_nlinear_solver_mcholesky;
0310 GSL_VAR const gsl_multilarge_nlinear_solver * gsl_multilarge_nlinear_solver_none;
0311
0312 __END_DECLS
0313
0314 #endif