summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/optimization/optimization_least_squares_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/optimization/optimization_least_squares_abstract.h')
-rw-r--r--ml/dlib/dlib/optimization/optimization_least_squares_abstract.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/ml/dlib/dlib/optimization/optimization_least_squares_abstract.h b/ml/dlib/dlib/optimization/optimization_least_squares_abstract.h
new file mode 100644
index 000000000..aaffb2221
--- /dev/null
+++ b/ml/dlib/dlib/optimization/optimization_least_squares_abstract.h
@@ -0,0 +1,112 @@
+// Copyright (C) 2010 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#undef DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_
+#ifdef DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_
+
+#include "../matrix/matrix_abstract.h"
+#include "optimization_trust_region_abstract.h"
+
+namespace dlib
+{
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename stop_strategy_type,
+ typename funct_type,
+ typename funct_der_type,
+ typename vector_type,
+ typename T
+ >
+ double solve_least_squares (
+ stop_strategy_type stop_strategy,
+ const funct_type& f,
+ const funct_der_type& der,
+ const vector_type& list,
+ T& x,
+ double radius = 1
+ );
+ /*!
+ requires
+ - stop_strategy == an object that defines a stop strategy such as one of
+ the objects from dlib/optimization/optimization_stop_strategies_abstract.h
+ - list == a matrix or something convertible to a matrix via mat()
+ such as a std::vector.
+ - is_vector(list) == true
+ - list.size() > 0
+ - is_col_vector(x) == true
+ - radius > 0
+ - for all valid i:
+ - f(list(i),x) must be a valid expression that evaluates to a floating point value.
+ - der(list(i),x) must be a valid expression that evaluates to the derivative of f(list(i),x)
+ with respect to x. This derivative must take the form of a column vector.
+ ensures
+ - This function performs an unconstrained minimization of the least squares
+ function g(x) defined by:
+ - g(x) = sum over all i: 0.5*pow( f(list(i),x), 2 )
+ - This method combines the Levenberg-Marquardt method with a quasi-newton method
+ for approximating the second order terms of the hessian and is appropriate for
+ large residual problems (i.e. problems where the f() function isn't driven to 0).
+ In particular, it uses the method of Dennis, Gay, and Welsch as described in
+ Numerical Optimization by Nocedal and Wright (second edition).
+ - Since this is a trust region algorithm, the radius parameter defines the initial
+ size of the trust region.
+ - The function is optimized until stop_strategy decides that an acceptable
+ point has been found or the trust region subproblem fails to make progress.
+ - #x == the value of x that was found to minimize g()
+ - returns g(#x).
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ template <
+ typename stop_strategy_type,
+ typename funct_type,
+ typename funct_der_type,
+ typename vector_type,
+ typename T
+ >
+ double solve_least_squares_lm (
+ stop_strategy_type stop_strategy,
+ const funct_type& f,
+ const funct_der_type& der,
+ const vector_type& list,
+ T& x,
+ double radius = 1
+ );
+ /*!
+ requires
+ - stop_strategy == an object that defines a stop strategy such as one of
+ the objects from dlib/optimization/optimization_stop_strategies_abstract.h
+ - list == a matrix or something convertible to a matrix via mat()
+ such as a std::vector.
+ - is_vector(list) == true
+ - list.size() > 0
+ - is_col_vector(x) == true
+ - radius > 0
+ - for all valid i:
+ - f(list(i),x) must be a valid expression that evaluates to a floating point value.
+ - der(list(i),x) must be a valid expression that evaluates to the derivative of f(list(i),x)
+ with respect to x. This derivative must take the form of a column vector.
+ ensures
+ - This function performs an unconstrained minimization of the least squares
+ function g(x) defined by:
+ - g(x) = sum over all i: 0.5*pow( f(list(i),x), 2 )
+ - This method implements a plain Levenberg-Marquardt approach for approximating
+ the hessian of g(). Therefore, it is most appropriate for small residual problems
+ (i.e. problems where f() goes to 0 at the solution).
+ - Since this is a trust region algorithm, the radius parameter defines the initial
+ size of the trust region.
+ - The function is optimized until stop_strategy decides that an acceptable
+ point has been found or the trust region subproblem fails to make progress.
+ - #x == the value of x that was found to minimize g()
+ - returns g(#x).
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+}
+
+#endif // DLIB_OPTIMIZATIOn_LEAST_SQUARES_ABSTRACT_
+
+