Backed out changeset 363e506776babe4fdfb8e670fe6d91942fc61d7c

This commit is contained in:
Gael Guennebaud 2012-12-07 20:53:19 +01:00
parent 363e506776
commit d85253ccf4
3 changed files with 1543 additions and 26 deletions

View File

@ -10,8 +10,8 @@
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef EIGEN_LEVENBERGMARQUARDT_LEGACY__H
#define EIGEN_LEVENBERGMARQUARDT_LEGACY__H
#ifndef EIGEN_LEVENBERGMARQUARDT__H
#define EIGEN_LEVENBERGMARQUARDT__H
namespace Eigen {
@ -43,10 +43,10 @@ namespace LevenbergMarquardtSpace {
* http://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm
*/
template<typename FunctorType, typename Scalar=double>
class LevenbergMarquardtLegacy
class LevenbergMarquardt
{
public:
LevenbergMarquardtLegacy(FunctorType &_functor)
LevenbergMarquardt(FunctorType &_functor)
: functor(_functor) { nfev = njev = iter = 0; fnorm = gnorm = 0.; useExternalScaling=false; }
typedef DenseIndex Index;
@ -120,12 +120,12 @@ private:
Scalar ratio;
Scalar pnorm, xnorm, fnorm1, actred, dirder, prered;
LevenbergMarquardtLegacy& operator=(const LevenbergMarquardtLegacy&);
LevenbergMarquardt& operator=(const LevenbergMarquardt&);
};
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::lmder1(
LevenbergMarquardt<FunctorType,Scalar>::lmder1(
FVectorType &x,
const Scalar tol
)
@ -148,7 +148,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::lmder1(
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimize(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimize(FVectorType &x)
{
LevenbergMarquardtSpace::Status status = minimizeInit(x);
if (status==LevenbergMarquardtSpace::ImproperInputParameters)
@ -161,7 +161,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimize(FVectorType &x)
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeInit(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimizeInit(FVectorType &x)
{
n = x.size();
m = functor.values();
@ -204,7 +204,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeInit(FVectorType &x)
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOneStep(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimizeOneStep(FVectorType &x)
{
using std::abs;
using std::sqrt;
@ -353,7 +353,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOneStep(FVectorType &x)
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::lmstr1(
LevenbergMarquardt<FunctorType,Scalar>::lmstr1(
FVectorType &x,
const Scalar tol
)
@ -375,7 +375,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::lmstr1(
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorageInit(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimizeOptimumStorageInit(FVectorType &x)
{
n = x.size();
m = functor.values();
@ -424,7 +424,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorageInit(FVector
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorageOneStep(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimizeOptimumStorageOneStep(FVectorType &x)
{
using std::abs;
using std::sqrt;
@ -603,7 +603,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorageOneStep(FVec
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorage(FVectorType &x)
LevenbergMarquardt<FunctorType,Scalar>::minimizeOptimumStorage(FVectorType &x)
{
LevenbergMarquardtSpace::Status status = minimizeOptimumStorageInit(x);
if (status==LevenbergMarquardtSpace::ImproperInputParameters)
@ -616,7 +616,7 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::minimizeOptimumStorage(FVectorType
template<typename FunctorType, typename Scalar>
LevenbergMarquardtSpace::Status
LevenbergMarquardtLegacy<FunctorType,Scalar>::lmdif1(
LevenbergMarquardt<FunctorType,Scalar>::lmdif1(
FunctorType &functor,
FVectorType &x,
Index *nfev,
@ -631,8 +631,8 @@ LevenbergMarquardtLegacy<FunctorType,Scalar>::lmdif1(
return LevenbergMarquardtSpace::ImproperInputParameters;
NumericalDiff<FunctorType> numDiff(functor);
// embedded LevenbergMarquardtLegacy
LevenbergMarquardtLegacy<NumericalDiff<FunctorType>, Scalar > lm(numDiff);
// embedded LevenbergMarquardt
LevenbergMarquardt<NumericalDiff<FunctorType>, Scalar > lm(numDiff);
lm.parameters.ftol = tol;
lm.parameters.xtol = tol;
lm.parameters.maxfev = 200*(n+1);

View File

@ -22,7 +22,8 @@ endif(ADOLC_FOUND)
# this test seems to never have been successful on x87, so is considered to contain a FP-related bug.
# see thread: "non-linear optimization test summary"
ei_add_test( NonLinearOptimization)
ei_add_test(NonLinearOptimization)
ei_add_test(NumericalDiff)
ei_add_test(autodiff)

File diff suppressed because it is too large Load Diff