aboutsummaryrefslogtreecommitdiffhomepage
path: root/unsupported/test/NonLinear.cpp
diff options
context:
space:
mode:
authorGravatar Thomas Capricelli <orzel@freehackers.org>2009-08-23 03:14:42 +0200
committerGravatar Thomas Capricelli <orzel@freehackers.org>2009-08-23 03:14:42 +0200
commit8a27e774f89521a7d12c250bccece23ffd93c2e6 (patch)
tree003d28b99980f9d31779af0686b65818cb50a19b /unsupported/test/NonLinear.cpp
parent3251e122582cfca7467ce3df54f4cfd892a57e3f (diff)
use eigen objects for hybrj and lmstr
Diffstat (limited to 'unsupported/test/NonLinear.cpp')
-rw-r--r--unsupported/test/NonLinear.cpp24
1 files changed, 15 insertions, 9 deletions
diff --git a/unsupported/test/NonLinear.cpp b/unsupported/test/NonLinear.cpp
index d9b878c94..31b44e5e8 100644
--- a/unsupported/test/NonLinear.cpp
+++ b/unsupported/test/NonLinear.cpp
@@ -217,13 +217,17 @@ void testLmder()
}
struct hybrj_functor {
- static int f(int n, const double *x, double *fvec, double *fjac, int ldfjac,
- int iflag)
+ static int f(const VectorXd &x, VectorXd &fvec, MatrixXd &fjac, int iflag)
{
/* subroutine fcn for hybrj1 example. */
int j, k;
double one=1, temp, temp1, temp2, three=3, two=2, zero=0, four=4;
+ const int n = x.size();
+
+ assert(fvec.size()==n);
+ assert(fjac.rows()==n);
+ assert(fjac.cols()==n);
if (iflag != 2)
{
@@ -242,12 +246,10 @@ struct hybrj_functor {
for (k = 0; k < n; k++)
{
for (j = 0; j < n; j++)
- {
- fjac[k + ldfjac*(j)] = zero;
- }
- fjac[k + ldfjac*(k)] = three - four*x[k];
- if (k) fjac[k + ldfjac*(k-1)] = -one;
- if (k != n-1) fjac[k + ldfjac*(k+1)] = -two;
+ fjac(k,j) = zero;
+ fjac(k,k) = three - four*x[k];
+ if (k) fjac(k,k-1) = -one;
+ if (k != n-1) fjac(k,k+1) = -two;
}
}
return 0;
@@ -398,7 +400,7 @@ void testHybrd()
}
struct lmstr_functor {
- static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjrow, int iflag)
+ static int f(const VectorXd &x, VectorXd &fvec, VectorXd &fjrow, int iflag)
{
/* subroutine fcn for lmstr1 example. */
int i;
@@ -406,6 +408,10 @@ struct lmstr_functor {
double y[15]={1.4e-1, 1.8e-1, 2.2e-1, 2.5e-1, 2.9e-1, 3.2e-1, 3.5e-1,
3.9e-1, 3.7e-1, 5.8e-1, 7.3e-1, 9.6e-1, 1.34, 2.1, 4.39};
+ assert(15==fvec.size());
+ assert(3==x.size());
+ assert(fjrow.size()==x.size());
+
if (iflag < 2)
{
for (i=0; i<15; i++)