1
/////////////////////////////////////////////////////////////////////////////////
3
// Levenberg - Marquardt non-linear minimization algorithm
4
// Copyright (C) 2004-06 Manolis Lourakis (lourakis at ics forth gr)
5
// Institute of Computer Science, Foundation for Research & Technology - Hellas
6
// Heraklion, Crete, Greece.
8
// This program is free software; you can redistribute it and/or modify
9
// it under the terms of the GNU General Public License as published by
10
// the Free Software Foundation; either version 2 of the License, or
11
// (at your option) any later version.
13
// This program is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
// GNU General Public License for more details.
18
/////////////////////////////////////////////////////////////////////////////////
20
/********************************************************************************
21
* combined box and linear equation constraints Levenberg-Marquardt nonlinear
22
* minimization. The same core code is used with appropriate #defines to derive
23
* single and double precision versions, see also lmblec_core.c
24
********************************************************************************/
37
#pragma message("Combined box and linearly constrained optimization requires LAPACK and was not compiled!")
39
#warning Combined box and linearly constrained optimization requires LAPACK and was not compiled!
42
#else // LAPACK present
44
#if !defined(LM_DBL_PREC) && !defined(LM_SNGL_PREC)
45
#error At least one of LM_DBL_PREC, LM_SNGL_PREC should be defined!
50
/* single precision (float) definitions */
54
#define LM_REAL_MAX FLT_MAX
55
#define LM_REAL_MIN -FLT_MAX
56
#define __SUBCNST(x) x##F
57
#define LM_CNST(x) __SUBCNST(x) // force substitution
59
#include "lmblec_core.c" // read in core code
67
#endif /* LM_SNGL_PREC */
70
/* double precision definitions */
71
#define LM_REAL double
74
#define LM_REAL_MAX DBL_MAX
75
#define LM_REAL_MIN -DBL_MAX
76
#define LM_CNST(x) (x)
78
#include "lmblec_core.c" // read in core code
85
#endif /* LM_DBL_PREC */
87
#endif /* HAVE_LAPACK */