mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-14 04:35:57 +08:00
move most of results vectors/matrices inside respective classes.
This commit is contained in:
parent
38fc6c8553
commit
6c1a9703b1
@ -8,17 +8,11 @@ public:
|
|||||||
|
|
||||||
int solve(
|
int solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||||
);
|
);
|
||||||
int solve(
|
int solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &R,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode=1,
|
const int mode=1,
|
||||||
int nb_of_subdiagonals = -1,
|
int nb_of_subdiagonals = -1,
|
||||||
@ -30,6 +24,10 @@ public:
|
|||||||
const int nprint=0
|
const int nprint=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Matrix< Scalar, Dynamic, 1 > fvec;
|
||||||
|
Matrix< Scalar, Dynamic, Dynamic > fjac;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > R;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > qtf;
|
||||||
private:
|
private:
|
||||||
const FunctorType &functor;
|
const FunctorType &functor;
|
||||||
};
|
};
|
||||||
@ -39,14 +37,12 @@ private:
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
const Scalar tol
|
const Scalar tol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int n = x.size();
|
const int n = x.size();
|
||||||
int info, nfev=0;
|
int info, nfev=0;
|
||||||
Matrix< Scalar, Dynamic, 1> R, qtf, diag;
|
Matrix< Scalar, Dynamic, 1> diag;
|
||||||
|
|
||||||
/* check the input parameters for errors. */
|
/* check the input parameters for errors. */
|
||||||
if (n <= 0 || tol < 0.) {
|
if (n <= 0 || tol < 0.) {
|
||||||
@ -56,10 +52,9 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
|||||||
|
|
||||||
diag.setConstant(n, 1.);
|
diag.setConstant(n, 1.);
|
||||||
info = solve(
|
info = solve(
|
||||||
x, fvec,
|
x,
|
||||||
nfev,
|
nfev,
|
||||||
fjac,
|
diag,
|
||||||
R, qtf, diag,
|
|
||||||
2,
|
2,
|
||||||
-1, -1,
|
-1, -1,
|
||||||
(n+1)*200,
|
(n+1)*200,
|
||||||
@ -73,11 +68,7 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &R,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode,
|
const int mode,
|
||||||
int nb_of_subdiagonals,
|
int nb_of_subdiagonals,
|
||||||
@ -95,10 +86,10 @@ int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
|
|||||||
|
|
||||||
if (nb_of_subdiagonals<0) nb_of_subdiagonals = n-1;
|
if (nb_of_subdiagonals<0) nb_of_subdiagonals = n-1;
|
||||||
if (nb_of_superdiagonals<0) nb_of_superdiagonals = n-1;
|
if (nb_of_superdiagonals<0) nb_of_superdiagonals = n-1;
|
||||||
fvec.resize(n);
|
|
||||||
qtf.resize(n);
|
qtf.resize(n);
|
||||||
R.resize( (n*(n+1))/2);
|
R.resize( (n*(n+1))/2);
|
||||||
fjac.resize(n, n);
|
fjac.resize(n, n);
|
||||||
|
fvec.resize(n);
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i, j, l, iwa[1];
|
int i, j, l, iwa[1];
|
||||||
|
@ -8,17 +8,11 @@ public:
|
|||||||
|
|
||||||
int solve(
|
int solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||||
);
|
);
|
||||||
int solve(
|
int solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev, int &njev,
|
int &nfev, int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &R,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode=1,
|
const int mode=1,
|
||||||
const int maxfev = 1000,
|
const int maxfev = 1000,
|
||||||
@ -27,6 +21,10 @@ public:
|
|||||||
const int nprint=0
|
const int nprint=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Matrix< Scalar, Dynamic, 1 > fvec;
|
||||||
|
Matrix< Scalar, Dynamic, Dynamic > fjac;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > R;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > qtf;
|
||||||
private:
|
private:
|
||||||
const FunctorType &functor;
|
const FunctorType &functor;
|
||||||
};
|
};
|
||||||
@ -36,14 +34,12 @@ private:
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
const Scalar tol
|
const Scalar tol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int n = x.size();
|
const int n = x.size();
|
||||||
int info, nfev=0, njev=0;
|
int info, nfev=0, njev=0;
|
||||||
Matrix< Scalar, Dynamic, 1> R, qtf, diag;
|
Matrix< Scalar, Dynamic, 1> diag;
|
||||||
|
|
||||||
/* check the input parameters for errors. */
|
/* check the input parameters for errors. */
|
||||||
if (n <= 0 || tol < 0.) {
|
if (n <= 0 || tol < 0.) {
|
||||||
@ -53,10 +49,9 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
|||||||
|
|
||||||
diag.setConstant(n, 1.);
|
diag.setConstant(n, 1.);
|
||||||
info = solve(
|
info = solve(
|
||||||
x, fvec,
|
x,
|
||||||
nfev, njev,
|
nfev, njev,
|
||||||
fjac,
|
diag,
|
||||||
R, qtf, diag,
|
|
||||||
2,
|
2,
|
||||||
(n+1)*100,
|
(n+1)*100,
|
||||||
100.,
|
100.,
|
||||||
@ -70,12 +65,8 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
int &njev,
|
int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &R,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode,
|
const int mode,
|
||||||
const int maxfev,
|
const int maxfev,
|
||||||
@ -91,6 +82,7 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
|
|||||||
qtf.resize(n);
|
qtf.resize(n);
|
||||||
R.resize( (n*(n+1))/2);
|
R.resize( (n*(n+1))/2);
|
||||||
fjac.resize(n, n);
|
fjac.resize(n, n);
|
||||||
|
fvec.resize(n);
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i, j, l, iwa[1];
|
int i, j, l, iwa[1];
|
||||||
|
@ -8,18 +8,13 @@ public:
|
|||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||||
);
|
);
|
||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
int &njev,
|
int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode=1,
|
const int mode=1,
|
||||||
const Scalar factor = 100.,
|
const Scalar factor = 100.,
|
||||||
@ -30,6 +25,10 @@ public:
|
|||||||
const int nprint=0
|
const int nprint=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Matrix< Scalar, Dynamic, 1 > fvec;
|
||||||
|
Matrix< Scalar, Dynamic, Dynamic > fjac;
|
||||||
|
VectorXi ipvt;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > qtf;
|
||||||
private:
|
private:
|
||||||
const FunctorType &functor;
|
const FunctorType &functor;
|
||||||
};
|
};
|
||||||
@ -38,11 +37,11 @@ private:
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol
|
const Scalar tol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int n = x.size(), m=fvec.size();
|
const int n = x.size();
|
||||||
|
const int m = functor.nbOfFunctions();
|
||||||
int info, nfev=0, njev=0;
|
int info, nfev=0, njev=0;
|
||||||
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
||||||
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
||||||
@ -55,9 +54,9 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
info = minimize(
|
info = minimize(
|
||||||
x, fvec,
|
x,
|
||||||
nfev, njev,
|
nfev, njev,
|
||||||
fjac, ipvt, qtf, diag,
|
diag,
|
||||||
1,
|
1,
|
||||||
100.,
|
100.,
|
||||||
(n+1)*100,
|
(n+1)*100,
|
||||||
@ -70,12 +69,8 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
int &njev,
|
int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode,
|
const int mode,
|
||||||
const Scalar factor,
|
const Scalar factor,
|
||||||
@ -86,9 +81,11 @@ int LevenbergMarquardt<FunctorType,Scalar>::minimize(
|
|||||||
const int nprint
|
const int nprint
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int m = fvec.size(), n = x.size();
|
const int n = x.size();
|
||||||
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
|
const int m = functor.nbOfFunctions();
|
||||||
|
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4;
|
||||||
|
|
||||||
|
fvec.resize(m);
|
||||||
ipvt.resize(n);
|
ipvt.resize(n);
|
||||||
fjac.resize(m, n);
|
fjac.resize(m, n);
|
||||||
diag.resize(n);
|
diag.resize(n);
|
||||||
|
@ -8,17 +8,12 @@ public:
|
|||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||||
);
|
);
|
||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode=1,
|
const int mode=1,
|
||||||
const Scalar factor = 100.,
|
const Scalar factor = 100.,
|
||||||
@ -30,6 +25,10 @@ public:
|
|||||||
const int nprint=0
|
const int nprint=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Matrix< Scalar, Dynamic, 1 > fvec;
|
||||||
|
Matrix< Scalar, Dynamic, Dynamic > fjac;
|
||||||
|
VectorXi ipvt;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > qtf;
|
||||||
private:
|
private:
|
||||||
const FunctorType &functor;
|
const FunctorType &functor;
|
||||||
};
|
};
|
||||||
@ -38,11 +37,11 @@ private:
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol
|
const Scalar tol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int n = x.size(), m=fvec.size();
|
const int n = x.size();
|
||||||
|
const int m = functor.nbOfFunctions();
|
||||||
int info, nfev=0;
|
int info, nfev=0;
|
||||||
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
||||||
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
||||||
@ -55,9 +54,9 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
info = minimize(
|
info = minimize(
|
||||||
x, fvec,
|
x,
|
||||||
nfev,
|
nfev,
|
||||||
fjac, ipvt, qtf, diag,
|
diag,
|
||||||
1,
|
1,
|
||||||
100.,
|
100.,
|
||||||
(n+1)*200,
|
(n+1)*200,
|
||||||
@ -69,11 +68,7 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode,
|
const int mode,
|
||||||
const Scalar factor,
|
const Scalar factor,
|
||||||
@ -85,9 +80,11 @@ int LevenbergMarquardtNumericalDiff<FunctorType,Scalar>::minimize(
|
|||||||
const int nprint
|
const int nprint
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int m = fvec.size(), n = x.size();
|
const int n = x.size();
|
||||||
|
const int m = functor.nbOfFunctions();
|
||||||
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
|
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
|
||||||
|
|
||||||
|
fvec.resize(m);
|
||||||
ipvt.resize(n);
|
ipvt.resize(n);
|
||||||
fjac.resize(m, n);
|
fjac.resize(m, n);
|
||||||
diag.resize(n);
|
diag.resize(n);
|
||||||
|
@ -8,18 +8,13 @@ public:
|
|||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
const Scalar tol = ei_sqrt(epsilon<Scalar>())
|
||||||
);
|
);
|
||||||
|
|
||||||
int minimize(
|
int minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
int &njev,
|
int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode=1,
|
const int mode=1,
|
||||||
const Scalar factor = 100.,
|
const Scalar factor = 100.,
|
||||||
@ -30,6 +25,10 @@ public:
|
|||||||
const int nprint=0
|
const int nprint=0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Matrix< Scalar, Dynamic, 1 > fvec;
|
||||||
|
Matrix< Scalar, Dynamic, Dynamic > fjac;
|
||||||
|
VectorXi ipvt;
|
||||||
|
Matrix< Scalar, Dynamic, 1 > qtf;
|
||||||
private:
|
private:
|
||||||
const FunctorType &functor;
|
const FunctorType &functor;
|
||||||
};
|
};
|
||||||
@ -38,11 +37,11 @@ private:
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
const Scalar tol
|
const Scalar tol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int n = x.size(), m=fvec.size();
|
const int n = x.size();
|
||||||
|
const int m = functor.nbOfFunctions();
|
||||||
int info, nfev=0, njev=0;
|
int info, nfev=0, njev=0;
|
||||||
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
Matrix< Scalar, Dynamic, Dynamic > fjac(m, n);
|
||||||
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
Matrix< Scalar, Dynamic, 1> diag, qtf;
|
||||||
@ -55,9 +54,9 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
info = minimize(
|
info = minimize(
|
||||||
x, fvec,
|
x,
|
||||||
nfev, njev,
|
nfev, njev,
|
||||||
fjac, ipvt, qtf, diag,
|
diag,
|
||||||
1,
|
1,
|
||||||
100.,
|
100.,
|
||||||
(n+1)*100,
|
(n+1)*100,
|
||||||
@ -69,12 +68,8 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
|||||||
template<typename FunctorType, typename Scalar>
|
template<typename FunctorType, typename Scalar>
|
||||||
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
||||||
Matrix< Scalar, Dynamic, 1 > &x,
|
Matrix< Scalar, Dynamic, 1 > &x,
|
||||||
Matrix< Scalar, Dynamic, 1 > &fvec,
|
|
||||||
int &nfev,
|
int &nfev,
|
||||||
int &njev,
|
int &njev,
|
||||||
Matrix< Scalar, Dynamic, Dynamic > &fjac,
|
|
||||||
VectorXi &ipvt,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &qtf,
|
|
||||||
Matrix< Scalar, Dynamic, 1 > &diag,
|
Matrix< Scalar, Dynamic, 1 > &diag,
|
||||||
const int mode,
|
const int mode,
|
||||||
const Scalar factor,
|
const Scalar factor,
|
||||||
@ -85,9 +80,11 @@ int LevenbergMarquardtOptimumStorage<FunctorType,Scalar>::minimize(
|
|||||||
const int nprint
|
const int nprint
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
const int m = fvec.size(), n = x.size();
|
const int n = x.size();
|
||||||
|
const int m = functor.nbOfFunctions();
|
||||||
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
|
Matrix< Scalar, Dynamic, 1 > wa1(n), wa2(n), wa3(n), wa4(m);
|
||||||
|
|
||||||
|
fvec.resize(m);
|
||||||
ipvt.resize(n);
|
ipvt.resize(n);
|
||||||
fjac.resize(m, n);
|
fjac.resize(m, n);
|
||||||
diag.resize(n);
|
diag.resize(n);
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user