4// Prototypes and definitions for the Levenberg - Marquardt minimization algorithm
5// Copyright (C) 2004 Manolis Lourakis (lourakis at ics forth gr)
6// Institute of Computer Science, Foundation for Research & Technology - Hellas
7// Heraklion, Crete, Greece.
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; either version 2 of the License, or
12// (at your option) any later version.
14// This program is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
44#define LINSOLVERS_RETAIN_MEMORY
46# ifdef LINSOLVERS_RETAIN_MEMORY
48# pragma message("LINSOLVERS_RETAIN_MEMORY is not safe in a multithreaded environment and should be turned off!")
50# warning LINSOLVERS_RETAIN_MEMORY is not safe in a multithreaded environment and should be turned off!
70#define LM_DER_WORKSZ(npar, nmeas) (2*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
71#define LM_DIF_WORKSZ(npar, nmeas) (4*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
76#define LM_BC_DER_WORKSZ(npar, nmeas) (2*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
77#define LM_BC_DIF_WORKSZ(npar, nmeas) LM_BC_DER_WORKSZ((npar), (nmeas))
82#define LM_LEC_DER_WORKSZ(npar, nmeas, nconstr) LM_DER_WORKSZ((npar)-(nconstr), (nmeas))
83#define LM_LEC_DIF_WORKSZ(npar, nmeas, nconstr) LM_DIF_WORKSZ((npar)-(nconstr), (nmeas))
88#define LM_BLEC_DER_WORKSZ(npar, nmeas, nconstr) LM_LEC_DER_WORKSZ((npar), (nmeas)+(npar), (nconstr))
89#define LM_BLEC_DIF_WORKSZ(npar, nmeas, nconstr) LM_LEC_DIF_WORKSZ((npar), (nmeas)+(npar), (nconstr))
94#define LM_BLEIC_DER_WORKSZ(npar, nmeas, nconstr1, nconstr2) LM_BLEC_DER_WORKSZ((npar)+(nconstr2), (nmeas)+(nconstr2), (nconstr1)+(nconstr2))
95#define LM_BLEIC_DIF_WORKSZ(npar, nmeas, nconstr1, nconstr2) LM_BLEC_DIF_WORKSZ((npar)+(nconstr2), (nmeas)+(nconstr2), (nconstr1)+(nconstr2))
100#define LM_INIT_MU 1E-03
101#define LM_STOP_THRESH 1E-17
102#define LM_DIFF_DELTA 1E-06
103#define LM_VERSION "2.6 (November 2011)"
109 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
110 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
111 double *p,
double *x,
int m,
int n,
int itmax,
double *opts,
112 double *info,
double *work,
double *covar,
void *adata);
115 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
116 double *p,
double *x,
int m,
int n,
int itmax,
double *opts,
117 double *info,
double *work,
double *covar,
void *adata);
121 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
122 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
123 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *dscl,
124 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
127 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
128 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *dscl,
129 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
134 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
135 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
136 double *p,
double *x,
int m,
int n,
double *A,
double *b,
int k,
137 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
140 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
141 double *p,
double *x,
int m,
int n,
double *A,
double *b,
int k,
142 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
146 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
147 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
148 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *A,
double *b,
int k,
double *wghts,
149 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
152 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
153 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *A,
double *b,
int k,
double *wghts,
154 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
158 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
159 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
160 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
161 double *A,
double *b,
int k1,
double *C,
double *d,
int k2,
162 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
165 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
166 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
167 double *A,
double *b,
int k1,
double *C,
double *d,
int k2,
168 int itmax,
double *opts,
double *info,
double *work,
double *covar,
void *adata);
172 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
173 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
174 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *C,
double *d,
int k2,
175 int itmax,
double opts[4],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
178 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
179 double *p,
double *x,
int m,
int n,
double *lb,
double *ub,
double *C,
double *d,
int k2,
180 int itmax,
double opts[5],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
184 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
185 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
186 double *p,
double *x,
int m,
int n,
double *A,
double *b,
int k1,
double *C,
double *d,
int k2,
187 int itmax,
double opts[4],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
190 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
191 double *p,
double *x,
int m,
int n,
double *A,
double *b,
int k1,
double *C,
double *d,
int k2,
192 int itmax,
double opts[5],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
196 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
197 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
198 double *p,
double *x,
int m,
int n,
double *C,
double *d,
int k2,
199 int itmax,
double opts[4],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
202 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
203 double *p,
double *x,
int m,
int n,
double *C,
double *d,
int k2,
204 int itmax,
double opts[5],
double info[
LM_INFO_SZ],
double *work,
double *covar,
void *adata);
214 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
215 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
216 float *p,
float *x,
int m,
int n,
int itmax,
float *opts,
217 float *info,
float *work,
float *covar,
void *adata);
220 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
221 float *p,
float *x,
int m,
int n,
int itmax,
float *opts,
222 float *info,
float *work,
float *covar,
void *adata);
226 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
227 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
228 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *dscl,
229 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
232 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
233 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *dscl,
234 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
239 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
240 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
241 float *p,
float *x,
int m,
int n,
float *A,
float *b,
int k,
242 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
245 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
246 float *p,
float *x,
int m,
int n,
float *A,
float *b,
int k,
247 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
251 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
252 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
253 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *A,
float *b,
int k,
float *wghts,
254 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
257 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
258 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *A,
float *b,
int k,
float *wghts,
259 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
263 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
264 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
265 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
266 float *A,
float *b,
int k1,
float *C,
float *d,
int k2,
267 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
270 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
271 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
272 float *A,
float *b,
int k1,
float *C,
float *d,
int k2,
273 int itmax,
float *opts,
float *info,
float *work,
float *covar,
void *adata);
277 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
278 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
279 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *C,
float *d,
int k2,
280 int itmax,
float opts[4],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
283 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
284 float *p,
float *x,
int m,
int n,
float *lb,
float *ub,
float *C,
float *d,
int k2,
285 int itmax,
float opts[5],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
289 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
290 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
291 float *p,
float *x,
int m,
int n,
float *A,
float *b,
int k1,
float *C,
float *d,
int k2,
292 int itmax,
float opts[4],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
295 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
296 float *p,
float *x,
int m,
int n,
float *A,
float *b,
int k1,
float *C,
float *d,
int k2,
297 int itmax,
float opts[5],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
301 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
302 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
303 float *p,
float *x,
int m,
int n,
float *C,
float *d,
int k2,
304 int itmax,
float opts[4],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
307 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
308 float *p,
float *x,
int m,
int n,
float *C,
float *d,
int k2,
309 int itmax,
float opts[5],
float info[
LM_INFO_SZ],
float *work,
float *covar,
void *adata);
338extern int dAx_eq_b_LU_noLapack(
double *A,
double *B,
double *x,
int n);
342extern int sAx_eq_b_LU_noLapack(
float *A,
float *B,
float *x,
int n);
349extern int dAx_eq_b_PLASMA_Chol(
double *A,
double *B,
double *x,
int m);
352extern int sAx_eq_b_PLASMA_Chol(
float *A,
float *B,
float *x,
int m);
354extern void levmar_PLASMA_setnbcores(
int cores);
360 void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
361 void (*jacf)(
double *p,
double *j,
int m,
int n,
void *adata),
362 double *p,
int m,
int n,
void *adata,
double *err);
367 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
368 void (*jacf)(
float *p,
float *j,
int m,
int n,
void *adata),
369 float *p,
int m,
int n,
void *adata,
float *err);
378extern double dlevmar_R2(
void (*func)(
double *p,
double *hx,
int m,
int n,
void *adata),
double *p,
double *x,
int m,
int n,
void *adata);
385extern float slevmar_R2(
void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
float *p,
float *x,
int m,
int n,
void *adata);
388 void (*func)(
float *p,
float *hx,
int m,
int n,
void *adata),
389 float *p,
float *x,
int m,
int n,
void *adata,
390 int howto,
float locscl[2],
float **residptr);
int dlevmar_lec_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *A, double *b, int k, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int slevmar_outlid(float *r, int n, float thresh, float ls[2], char *outlmap)
int slevmar_bc_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *dscl, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dAx_eq_b_Chol(double *A, double *B, double *x, int m)
int dlevmar_bleic_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k1, double *C, double *d, int k2, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int sAx_eq_b_SVD(float *A, float *B, float *x, int m)
double dlevmar_R2(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, void *adata)
int sAx_eq_b_Chol(float *A, float *B, float *x, int m)
int slevmar_bc_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *dscl, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dlevmar_blic_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2, int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
void dlevmar_chkjac(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, int m, int n, void *adata, double *err)
int dlevmar_leic_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2, int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
double dlevmar_corcoef(double *covar, int m, int i, int j)
int slevmar_blic_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *C, float *d, int k2, int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata)
int slevmar_lic_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *C, float *d, int k2, int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata)
int sAx_eq_b_BK(float *A, float *B, float *x, int m)
int dlevmar_lic_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *C, double *d, int k2, int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
float slevmar_corcoef(float *covar, int m, int i, int j)
int dlevmar_blec_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
void slevmar_chkjac(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, int m, int n, void *adata, float *err)
void slevmar_locscale(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, void *adata, int howto, float locscl[2], float **residptr)
int dlevmar_blec_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int slevmar_bleic_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k1, float *C, float *d, int k2, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dAx_eq_b_QRLS(double *A, double *B, double *x, int m, int n)
int dAx_eq_b_QR(double *A, double *B, double *x, int m)
double dlevmar_stddev(double *covar, int m, int i)
int sAx_eq_b_QRLS(float *A, float *B, float *x, int m, int n)
int slevmar_bleic_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k1, float *C, float *d, int k2, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int slevmar_blic_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *C, float *d, int k2, int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata)
float slevmar_R2(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, void *adata)
int slevmar_lec_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *A, float *b, int k, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int slevmar_leic_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *A, float *b, int k1, float *C, float *d, int k2, int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata)
int dlevmar_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int slevmar_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int slevmar_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int slevmar_lec_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *A, float *b, int k, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dlevmar_bc_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *dscl, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int dlevmar_lec_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *A, double *b, int k, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
float slevmar_stddev(float *covar, int m, int i)
int dAx_eq_b_SVD(double *A, double *B, double *x, int m)
int slevmar_blec_der(void(*func)(float *p, float *hx, int m, int n, void *adata), void(*jacf)(float *p, float *j, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k, float *wghts, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dlevmar_blic_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2, int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
int sAx_eq_b_LU(float *A, float *B, float *x, int m)
int dAx_eq_b_BK(double *A, double *B, double *x, int m)
int slevmar_leic_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *A, float *b, int k1, float *C, float *d, int k2, int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata)
int dAx_eq_b_LU(double *A, double *B, double *x, int m)
int dlevmar_bleic_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k1, double *C, double *d, int k2, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int sAx_eq_b_QR(float *A, float *B, float *x, int m)
int slevmar_blec_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k, float *wghts, int itmax, float *opts, float *info, float *work, float *covar, void *adata)
int dlevmar_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int dlevmar_lic_der(void(*func)(double *p, double *hx, int m, int n, void *adata), void(*jacf)(double *p, double *j, int m, int n, void *adata), double *p, double *x, int m, int n, double *C, double *d, int k2, int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
int dlevmar_leic_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2, int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata)
int dlevmar_bc_dif(void(*func)(double *p, double *hx, int m, int n, void *adata), double *p, double *x, int m, int n, double *lb, double *ub, double *dscl, int itmax, double *opts, double *info, double *work, double *covar, void *adata)
int slevmar_lic_dif(void(*func)(float *p, float *hx, int m, int n, void *adata), float *p, float *x, int m, int n, float *C, float *d, int k2, int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata)