This commit is contained in:
Thomas Capricelli 2009-08-25 14:03:30 +02:00
parent d880e6f774
commit a736378331
3 changed files with 8 additions and 10 deletions

View File

@ -5,12 +5,13 @@ class HybridNonLinearSolverNumericalDiff
public:
HybridNonLinearSolverNumericalDiff(const FunctorType &_functor)
: functor(_functor) {}
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
@ -39,17 +40,17 @@ template<typename FunctorType, typename Scalar>
int HybridNonLinearSolverNumericalDiff<FunctorType,Scalar>::solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol
)
{
const int n = x.size();
int info, nfev=0;
Matrix< Scalar, Dynamic, Dynamic > fjac;
Matrix< Scalar, Dynamic, 1> R, qtf, diag;
/* check the input parameters for errors. */
if (n <= 0 || tol < 0.) {
printf("solve bad args : n,tol,...");
printf("HybridNonLinearSolver::solve() bad args : n,tol,...");
return 0;
}

View File

@ -1,5 +1,4 @@
template<typename FunctorType, typename Scalar>
class HybridNonLinearSolver
{
@ -7,19 +6,16 @@ public:
HybridNonLinearSolver(const FunctorType &_functor)
: functor(_functor) {}
int solve(
Matrix< Scalar, Dynamic, 1 > &x,
Matrix< Scalar, Dynamic, 1 > &fvec,
Matrix< Scalar, Dynamic, Dynamic > &fjac,
Scalar tol = ei_sqrt(epsilon<Scalar>())
);
int solve(
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,
@ -51,7 +47,7 @@ int HybridNonLinearSolver<FunctorType,Scalar>::solve(
/* check the input parameters for errors. */
if (n <= 0 || tol < 0.) {
printf("ei_hybrd1 bad args : n,tol,...");
printf("HybridNonLinearSolver::solve() bad args : n,tol,...");
return 0;
}

View File

@ -351,6 +351,7 @@ void testHybrd1()
{
int n=9, info;
VectorXd x(n), fvec(n);
MatrixXd fjac;
/* the following starting values provide a rough solution. */
x.setConstant(n, -1.);
@ -358,7 +359,7 @@ void testHybrd1()
// do the computation
hybrd_functor functor;
HybridNonLinearSolverNumericalDiff <hybrd_functor,double> solver(functor);
info = solver.solve(x, fvec);
info = solver.solve(x, fvec, fjac);
// check return value
VERIFY( 1 == info);