source: ThirdParty/levmar/src/levmar.h@ 7516f6

Action_Thermostats Adding_MD_integration_tests Adding_StructOpt_integration_tests AutomationFragmentation_failures Candidate_v1.6.1 ChemicalSpaceEvaluator Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Exclude_Hydrogens_annealWithBondGraph Fix_Verbose_Codepatterns ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion Gui_displays_atomic_force_velocity JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool PythonUI_with_named_parameters Recreated_GuiChecks StoppableMakroAction TremoloParser_IncreasedPrecision
Last change on this file since 7516f6 was 8ce1a9, checked in by Frederik Heber <heber@…>, 8 years ago

Merge commit '5443b10a06f0c125d0ae0500abb09901fda9666b' as 'ThirdParty/levmar'

  • Property mode set to 100644
File size: 18.4 KB
Line 
1/*
2////////////////////////////////////////////////////////////////////////////////////
3//
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.
8//
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.
13//
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.
18//
19////////////////////////////////////////////////////////////////////////////////////
20*/
21
22#ifndef _LEVMAR_H_
23#define _LEVMAR_H_
24
25/************************************* Start of configuration options *************************************/
26/* Note that when compiling with CMake, this configuration section is automatically generated
27 * based on the user's input, see levmar.h.in
28 */
29
30/* specifies whether to use LAPACK or not. Using LAPACK is strongly recommended */
31#define HAVE_LAPACK
32
33/* specifies whether the PLASMA parallel library for multicore CPUs is available */
34/* #undef HAVE_PLASMA */
35
36/* to avoid the overhead of repeated mallocs(), routines in Axb.c can be instructed to
37 * retain working memory between calls. Such a choice, however, renders these routines
38 * non-reentrant and is not safe in a shared memory multiprocessing environment.
39 * Bellow, an attempt is made to issue a warning if this option is turned on and OpenMP
40 * is being used (note that this will work only if omp.h is included before levmar.h)
41 */
42#define LINSOLVERS_RETAIN_MEMORY
43#if (defined(_OPENMP))
44# ifdef LINSOLVERS_RETAIN_MEMORY
45# ifdef _MSC_VER
46# pragma message("LINSOLVERS_RETAIN_MEMORY is not safe in a multithreaded environment and should be turned off!")
47# else
48# warning LINSOLVERS_RETAIN_MEMORY is not safe in a multithreaded environment and should be turned off!
49# endif /* _MSC_VER */
50# endif /* LINSOLVERS_RETAIN_MEMORY */
51#endif /* _OPENMP */
52
53/* specifies whether double precision routines will be compiled or not */
54#define LM_DBL_PREC
55/* specifies whether single precision routines will be compiled or not */
56#define LM_SNGL_PREC
57
58/****************** End of configuration options, no changes necessary beyond this point ******************/
59
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65/* work arrays size for ?levmar_der and ?levmar_dif functions.
66 * should be multiplied by sizeof(double) or sizeof(float) to be converted to bytes
67 */
68#define LM_DER_WORKSZ(npar, nmeas) (2*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
69#define LM_DIF_WORKSZ(npar, nmeas) (4*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
70
71/* work arrays size for ?levmar_bc_der and ?levmar_bc_dif functions.
72 * should be multiplied by sizeof(double) or sizeof(float) to be converted to bytes
73 */
74#define LM_BC_DER_WORKSZ(npar, nmeas) (2*(nmeas) + 4*(npar) + (nmeas)*(npar) + (npar)*(npar))
75#define LM_BC_DIF_WORKSZ(npar, nmeas) LM_BC_DER_WORKSZ((npar), (nmeas)) /* LEVMAR_BC_DIF currently implemented using LEVMAR_BC_DER()! */
76
77/* work arrays size for ?levmar_lec_der and ?levmar_lec_dif functions.
78 * should be multiplied by sizeof(double) or sizeof(float) to be converted to bytes
79 */
80#define LM_LEC_DER_WORKSZ(npar, nmeas, nconstr) LM_DER_WORKSZ((npar)-(nconstr), (nmeas))
81#define LM_LEC_DIF_WORKSZ(npar, nmeas, nconstr) LM_DIF_WORKSZ((npar)-(nconstr), (nmeas))
82
83/* work arrays size for ?levmar_blec_der and ?levmar_blec_dif functions.
84 * should be multiplied by sizeof(double) or sizeof(float) to be converted to bytes
85 */
86#define LM_BLEC_DER_WORKSZ(npar, nmeas, nconstr) LM_LEC_DER_WORKSZ((npar), (nmeas)+(npar), (nconstr))
87#define LM_BLEC_DIF_WORKSZ(npar, nmeas, nconstr) LM_LEC_DIF_WORKSZ((npar), (nmeas)+(npar), (nconstr))
88
89/* work arrays size for ?levmar_bleic_der and ?levmar_bleic_dif functions.
90 * should be multiplied by sizeof(double) or sizeof(float) to be converted to bytes
91 */
92#define LM_BLEIC_DER_WORKSZ(npar, nmeas, nconstr1, nconstr2) LM_BLEC_DER_WORKSZ((npar)+(nconstr2), (nmeas)+(nconstr2), (nconstr1)+(nconstr2))
93#define LM_BLEIC_DIF_WORKSZ(npar, nmeas, nconstr1, nconstr2) LM_BLEC_DIF_WORKSZ((npar)+(nconstr2), (nmeas)+(nconstr2), (nconstr1)+(nconstr2))
94
95#define LM_OPTS_SZ 5 /* max(4, 5) */
96#define LM_INFO_SZ 10
97#define LM_ERROR -1
98#define LM_INIT_MU 1E-03
99#define LM_STOP_THRESH 1E-17
100#define LM_DIFF_DELTA 1E-06
101#define LM_VERSION "2.6 (November 2011)"
102
103#ifdef LM_DBL_PREC
104/* double precision LM, with & without Jacobian */
105/* unconstrained minimization */
106extern int dlevmar_der(
107 void (*func)(double *p, double *hx, int m, int n, void *adata),
108 void (*jacf)(double *p, double *j, int m, int n, void *adata),
109 double *p, double *x, int m, int n, int itmax, double *opts,
110 double *info, double *work, double *covar, void *adata);
111
112extern int dlevmar_dif(
113 void (*func)(double *p, double *hx, int m, int n, void *adata),
114 double *p, double *x, int m, int n, int itmax, double *opts,
115 double *info, double *work, double *covar, void *adata);
116
117/* box-constrained minimization */
118extern int dlevmar_bc_der(
119 void (*func)(double *p, double *hx, int m, int n, void *adata),
120 void (*jacf)(double *p, double *j, int m, int n, void *adata),
121 double *p, double *x, int m, int n, double *lb, double *ub, double *dscl,
122 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
123
124extern int dlevmar_bc_dif(
125 void (*func)(double *p, double *hx, int m, int n, void *adata),
126 double *p, double *x, int m, int n, double *lb, double *ub, double *dscl,
127 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
128
129#ifdef HAVE_LAPACK
130/* linear equation constrained minimization */
131extern int dlevmar_lec_der(
132 void (*func)(double *p, double *hx, int m, int n, void *adata),
133 void (*jacf)(double *p, double *j, int m, int n, void *adata),
134 double *p, double *x, int m, int n, double *A, double *b, int k,
135 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
136
137extern int dlevmar_lec_dif(
138 void (*func)(double *p, double *hx, int m, int n, void *adata),
139 double *p, double *x, int m, int n, double *A, double *b, int k,
140 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
141
142/* box & linear equation constrained minimization */
143extern int dlevmar_blec_der(
144 void (*func)(double *p, double *hx, int m, int n, void *adata),
145 void (*jacf)(double *p, double *j, int m, int n, void *adata),
146 double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts,
147 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
148
149extern int dlevmar_blec_dif(
150 void (*func)(double *p, double *hx, int m, int n, void *adata),
151 double *p, double *x, int m, int n, double *lb, double *ub, double *A, double *b, int k, double *wghts,
152 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
153
154/* box, linear equations & inequalities constrained minimization */
155extern int dlevmar_bleic_der(
156 void (*func)(double *p, double *hx, int m, int n, void *adata),
157 void (*jacf)(double *p, double *j, int m, int n, void *adata),
158 double *p, double *x, int m, int n, double *lb, double *ub,
159 double *A, double *b, int k1, double *C, double *d, int k2,
160 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
161
162extern int dlevmar_bleic_dif(
163 void (*func)(double *p, double *hx, int m, int n, void *adata),
164 double *p, double *x, int m, int n, double *lb, double *ub,
165 double *A, double *b, int k1, double *C, double *d, int k2,
166 int itmax, double *opts, double *info, double *work, double *covar, void *adata);
167
168/* box & linear inequality constraints */
169extern int dlevmar_blic_der(
170 void (*func)(double *p, double *hx, int m, int n, void *adata),
171 void (*jacf)(double *p, double *j, int m, int n, void *adata),
172 double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2,
173 int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
174
175extern int dlevmar_blic_dif(
176 void (*func)(double *p, double *hx, int m, int n, void *adata),
177 double *p, double *x, int m, int n, double *lb, double *ub, double *C, double *d, int k2,
178 int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
179
180/* linear equation & inequality constraints */
181extern int dlevmar_leic_der(
182 void (*func)(double *p, double *hx, int m, int n, void *adata),
183 void (*jacf)(double *p, double *j, int m, int n, void *adata),
184 double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2,
185 int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
186
187extern int dlevmar_leic_dif(
188 void (*func)(double *p, double *hx, int m, int n, void *adata),
189 double *p, double *x, int m, int n, double *A, double *b, int k1, double *C, double *d, int k2,
190 int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
191
192/* linear inequality constraints */
193extern int dlevmar_lic_der(
194 void (*func)(double *p, double *hx, int m, int n, void *adata),
195 void (*jacf)(double *p, double *j, int m, int n, void *adata),
196 double *p, double *x, int m, int n, double *C, double *d, int k2,
197 int itmax, double opts[4], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
198
199extern int dlevmar_lic_dif(
200 void (*func)(double *p, double *hx, int m, int n, void *adata),
201 double *p, double *x, int m, int n, double *C, double *d, int k2,
202 int itmax, double opts[5], double info[LM_INFO_SZ], double *work, double *covar, void *adata);
203#endif /* HAVE_LAPACK */
204
205#endif /* LM_DBL_PREC */
206
207
208#ifdef LM_SNGL_PREC
209/* single precision LM, with & without Jacobian */
210/* unconstrained minimization */
211extern int slevmar_der(
212 void (*func)(float *p, float *hx, int m, int n, void *adata),
213 void (*jacf)(float *p, float *j, int m, int n, void *adata),
214 float *p, float *x, int m, int n, int itmax, float *opts,
215 float *info, float *work, float *covar, void *adata);
216
217extern int slevmar_dif(
218 void (*func)(float *p, float *hx, int m, int n, void *adata),
219 float *p, float *x, int m, int n, int itmax, float *opts,
220 float *info, float *work, float *covar, void *adata);
221
222/* box-constrained minimization */
223extern int slevmar_bc_der(
224 void (*func)(float *p, float *hx, int m, int n, void *adata),
225 void (*jacf)(float *p, float *j, int m, int n, void *adata),
226 float *p, float *x, int m, int n, float *lb, float *ub, float *dscl,
227 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
228
229extern int slevmar_bc_dif(
230 void (*func)(float *p, float *hx, int m, int n, void *adata),
231 float *p, float *x, int m, int n, float *lb, float *ub, float *dscl,
232 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
233
234#ifdef HAVE_LAPACK
235/* linear equation constrained minimization */
236extern int slevmar_lec_der(
237 void (*func)(float *p, float *hx, int m, int n, void *adata),
238 void (*jacf)(float *p, float *j, int m, int n, void *adata),
239 float *p, float *x, int m, int n, float *A, float *b, int k,
240 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
241
242extern int slevmar_lec_dif(
243 void (*func)(float *p, float *hx, int m, int n, void *adata),
244 float *p, float *x, int m, int n, float *A, float *b, int k,
245 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
246
247/* box & linear equation constrained minimization */
248extern int slevmar_blec_der(
249 void (*func)(float *p, float *hx, int m, int n, void *adata),
250 void (*jacf)(float *p, float *j, int m, int n, void *adata),
251 float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k, float *wghts,
252 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
253
254extern int slevmar_blec_dif(
255 void (*func)(float *p, float *hx, int m, int n, void *adata),
256 float *p, float *x, int m, int n, float *lb, float *ub, float *A, float *b, int k, float *wghts,
257 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
258
259/* box, linear equations & inequalities constrained minimization */
260extern int slevmar_bleic_der(
261 void (*func)(float *p, float *hx, int m, int n, void *adata),
262 void (*jacf)(float *p, float *j, int m, int n, void *adata),
263 float *p, float *x, int m, int n, float *lb, float *ub,
264 float *A, float *b, int k1, float *C, float *d, int k2,
265 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
266
267extern int slevmar_bleic_dif(
268 void (*func)(float *p, float *hx, int m, int n, void *adata),
269 float *p, float *x, int m, int n, float *lb, float *ub,
270 float *A, float *b, int k1, float *C, float *d, int k2,
271 int itmax, float *opts, float *info, float *work, float *covar, void *adata);
272
273/* box & linear inequality constraints */
274extern int slevmar_blic_der(
275 void (*func)(float *p, float *hx, int m, int n, void *adata),
276 void (*jacf)(float *p, float *j, int m, int n, void *adata),
277 float *p, float *x, int m, int n, float *lb, float *ub, float *C, float *d, int k2,
278 int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
279
280extern int slevmar_blic_dif(
281 void (*func)(float *p, float *hx, int m, int n, void *adata),
282 float *p, float *x, int m, int n, float *lb, float *ub, float *C, float *d, int k2,
283 int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
284
285/* linear equality & inequality constraints */
286extern int slevmar_leic_der(
287 void (*func)(float *p, float *hx, int m, int n, void *adata),
288 void (*jacf)(float *p, float *j, int m, int n, void *adata),
289 float *p, float *x, int m, int n, float *A, float *b, int k1, float *C, float *d, int k2,
290 int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
291
292extern int slevmar_leic_dif(
293 void (*func)(float *p, float *hx, int m, int n, void *adata),
294 float *p, float *x, int m, int n, float *A, float *b, int k1, float *C, float *d, int k2,
295 int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
296
297/* linear inequality constraints */
298extern int slevmar_lic_der(
299 void (*func)(float *p, float *hx, int m, int n, void *adata),
300 void (*jacf)(float *p, float *j, int m, int n, void *adata),
301 float *p, float *x, int m, int n, float *C, float *d, int k2,
302 int itmax, float opts[4], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
303
304extern int slevmar_lic_dif(
305 void (*func)(float *p, float *hx, int m, int n, void *adata),
306 float *p, float *x, int m, int n, float *C, float *d, int k2,
307 int itmax, float opts[5], float info[LM_INFO_SZ], float *work, float *covar, void *adata);
308#endif /* HAVE_LAPACK */
309
310#endif /* LM_SNGL_PREC */
311
312/* linear system solvers */
313#ifdef HAVE_LAPACK
314
315#ifdef LM_DBL_PREC
316extern int dAx_eq_b_QR(double *A, double *B, double *x, int m);
317extern int dAx_eq_b_QRLS(double *A, double *B, double *x, int m, int n);
318extern int dAx_eq_b_Chol(double *A, double *B, double *x, int m);
319extern int dAx_eq_b_LU(double *A, double *B, double *x, int m);
320extern int dAx_eq_b_SVD(double *A, double *B, double *x, int m);
321extern int dAx_eq_b_BK(double *A, double *B, double *x, int m);
322#endif /* LM_DBL_PREC */
323
324#ifdef LM_SNGL_PREC
325extern int sAx_eq_b_QR(float *A, float *B, float *x, int m);
326extern int sAx_eq_b_QRLS(float *A, float *B, float *x, int m, int n);
327extern int sAx_eq_b_Chol(float *A, float *B, float *x, int m);
328extern int sAx_eq_b_LU(float *A, float *B, float *x, int m);
329extern int sAx_eq_b_SVD(float *A, float *B, float *x, int m);
330extern int sAx_eq_b_BK(float *A, float *B, float *x, int m);
331#endif /* LM_SNGL_PREC */
332
333#else /* no LAPACK */
334
335#ifdef LM_DBL_PREC
336extern int dAx_eq_b_LU_noLapack(double *A, double *B, double *x, int n);
337#endif /* LM_DBL_PREC */
338
339#ifdef LM_SNGL_PREC
340extern int sAx_eq_b_LU_noLapack(float *A, float *B, float *x, int n);
341#endif /* LM_SNGL_PREC */
342
343#endif /* HAVE_LAPACK */
344
345#ifdef HAVE_PLASMA
346#ifdef LM_DBL_PREC
347extern int dAx_eq_b_PLASMA_Chol(double *A, double *B, double *x, int m);
348#endif
349#ifdef LM_SNGL_PREC
350extern int sAx_eq_b_PLASMA_Chol(float *A, float *B, float *x, int m);
351#endif
352extern void levmar_PLASMA_setnbcores(int cores);
353#endif /* HAVE_PLASMA */
354
355/* Jacobian verification, double & single precision */
356#ifdef LM_DBL_PREC
357extern void dlevmar_chkjac(
358 void (*func)(double *p, double *hx, int m, int n, void *adata),
359 void (*jacf)(double *p, double *j, int m, int n, void *adata),
360 double *p, int m, int n, void *adata, double *err);
361#endif /* LM_DBL_PREC */
362
363#ifdef LM_SNGL_PREC
364extern void slevmar_chkjac(
365 void (*func)(float *p, float *hx, int m, int n, void *adata),
366 void (*jacf)(float *p, float *j, int m, int n, void *adata),
367 float *p, int m, int n, void *adata, float *err);
368#endif /* LM_SNGL_PREC */
369
370/* miscellaneous: standard deviation, coefficient of determination (R2),
371 * Pearson's correlation coefficient for best-fit parameters
372 */
373#ifdef LM_DBL_PREC
374extern double dlevmar_stddev( double *covar, int m, int i);
375extern double dlevmar_corcoef(double *covar, int m, int i, int j);
376extern 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);
377
378#endif /* LM_DBL_PREC */
379
380#ifdef LM_SNGL_PREC
381extern float slevmar_stddev( float *covar, int m, int i);
382extern float slevmar_corcoef(float *covar, int m, int i, int j);
383extern 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);
384
385extern void slevmar_locscale(
386 void (*func)(float *p, float *hx, int m, int n, void *adata),
387 float *p, float *x, int m, int n, void *adata,
388 int howto, float locscl[2], float **residptr);
389
390extern int slevmar_outlid(float *r, int n, float thresh, float ls[2], char *outlmap);
391
392#endif /* LM_SNGL_PREC */
393
394#ifdef __cplusplus
395}
396#endif
397
398#endif /* _LEVMAR_H_ */
Note: See TracBrowser for help on using the repository browser.