mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-15 07:10:37 +08:00
remove redundant code, fix bounds in those loops that still come from
fortran
This commit is contained in:
parent
1225704753
commit
2727099906
@ -101,7 +101,7 @@ void testChkder()
|
||||
}
|
||||
|
||||
|
||||
struct lmder1_functor {
|
||||
struct lmder_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjac, int ldfjac, int iflag)
|
||||
{
|
||||
|
||||
@ -114,27 +114,25 @@ struct lmder1_functor {
|
||||
|
||||
if (iflag != 2)
|
||||
{
|
||||
for (i = 1; i <= 15; i++)
|
||||
for (i = 0; i < 15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
fvec[i-1] = y[i-1] - (x[1-1] + tmp1/(x[2-1]*tmp2 + x[3-1]*tmp3));
|
||||
tmp1 = i+1;
|
||||
tmp2 = 16 - i - 1;
|
||||
tmp3 = (i>=8)? tmp2 : tmp1;
|
||||
fvec[i] = y[i] - (x[0] + tmp1/(x[1]*tmp2 + x[2]*tmp3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( i = 1; i <= 15; i++)
|
||||
for ( i = 0; i < 15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
tmp4 = (x[2-1]*tmp2 + x[3-1]*tmp3); tmp4 = tmp4*tmp4;
|
||||
fjac[i-1 + ldfjac*(1-1)] = -1.;
|
||||
fjac[i-1 + ldfjac*(2-1)] = tmp1*tmp2/tmp4;
|
||||
fjac[i-1 + ldfjac*(3-1)] = tmp1*tmp3/tmp4;
|
||||
tmp1 = i+1;
|
||||
tmp2 = 16 - i - 1;
|
||||
tmp3 = (i>=8)? tmp2 : tmp1;
|
||||
tmp4 = (x[1]*tmp2 + x[2]*tmp3); tmp4 = tmp4*tmp4;
|
||||
fjac[i + ldfjac*(0)] = -1.;
|
||||
fjac[i + ldfjac*(1)] = tmp1*tmp2/tmp4;
|
||||
fjac[i + ldfjac*(2)] = tmp1*tmp3/tmp4;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -153,7 +151,7 @@ void testLmder1()
|
||||
x.setConstant(n, 1.);
|
||||
|
||||
// do the computation
|
||||
info = ei_lmder1<lmder1_functor,double>(x, fvec, ipvt);
|
||||
info = ei_lmder1<lmder_functor,double>(x, fvec, ipvt);
|
||||
|
||||
// check return value
|
||||
VERIFY( 1 == info);
|
||||
@ -167,52 +165,6 @@ void testLmder1()
|
||||
VERIFY_IS_APPROX(x, x_ref);
|
||||
}
|
||||
|
||||
struct lmder_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjac, int ldfjac, int iflag)
|
||||
{
|
||||
|
||||
/* subroutine fcn for lmder example. */
|
||||
|
||||
int i;
|
||||
double tmp1, tmp2, tmp3, tmp4;
|
||||
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};
|
||||
|
||||
if (iflag == 0)
|
||||
{
|
||||
/* insert print statements here when nprint is positive. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (iflag != 2)
|
||||
{
|
||||
for (i=1; i <= 15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
fvec[i-1] = y[i-1] - (x[1-1] + tmp1/(x[2-1]*tmp2 + x[3-1]*tmp3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i=1; i<=15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
tmp4 = (x[2-1]*tmp2 + x[3-1]*tmp3); tmp4 = tmp4*tmp4;
|
||||
fjac[i-1 + ldfjac*(1-1)] = -1.;
|
||||
fjac[i-1 + ldfjac*(2-1)] = tmp1*tmp2/tmp4;
|
||||
fjac[i-1 + ldfjac*(3-1)] = tmp1*tmp3/tmp4;
|
||||
};
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void testLmder()
|
||||
{
|
||||
const int m=15, n=3;
|
||||
@ -264,7 +216,7 @@ void testLmder()
|
||||
// VERIFY_IS_APPROX( covfac*fjac.corner<n,n>(TopLeft) , cov_ref);
|
||||
}
|
||||
|
||||
struct hybrj1_functor {
|
||||
struct hybrj_functor {
|
||||
static int f(int n, const double *x, double *fvec, double *fjac, int ldfjac,
|
||||
int iflag)
|
||||
{
|
||||
@ -275,27 +227,27 @@ struct hybrj1_functor {
|
||||
|
||||
if (iflag != 2)
|
||||
{
|
||||
for (k = 1; k <= n; k++)
|
||||
for (k = 0; k < n; k++)
|
||||
{
|
||||
temp = (three - two*x[k-1])*x[k-1];
|
||||
temp = (three - two*x[k])*x[k];
|
||||
temp1 = zero;
|
||||
if (k != 1) temp1 = x[k-1-1];
|
||||
if (k) temp1 = x[k-1];
|
||||
temp2 = zero;
|
||||
if (k != n) temp2 = x[k+1-1];
|
||||
fvec[k-1] = temp - temp1 - two*temp2 + one;
|
||||
if (k != n-1) temp2 = x[k+1];
|
||||
fvec[k] = temp - temp1 - two*temp2 + one;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (k = 1; k <= n; k++)
|
||||
for (k = 0; k < n; k++)
|
||||
{
|
||||
for (j = 1; j <= n; j++)
|
||||
for (j = 0; j < n; j++)
|
||||
{
|
||||
fjac[k-1 + ldfjac*(j-1)] = zero;
|
||||
fjac[k + ldfjac*(j)] = zero;
|
||||
}
|
||||
fjac[k-1 + ldfjac*(k-1)] = three - four*x[k-1];
|
||||
if (k != 1) fjac[k-1 + ldfjac*(k-1-1)] = -one;
|
||||
if (k != n) fjac[k-1 + ldfjac*(k+1-1)] = -two;
|
||||
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;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -314,7 +266,7 @@ void testHybrj1()
|
||||
x.setConstant(n, -1.);
|
||||
|
||||
// do the computation
|
||||
info = ei_hybrj1<hybrj1_functor, double>(x,fvec, fjac);
|
||||
info = ei_hybrj1<hybrj_functor, double>(x,fvec, fjac);
|
||||
|
||||
// check return value
|
||||
VERIFY( 1 == info);
|
||||
@ -332,51 +284,6 @@ void testHybrj1()
|
||||
VERIFY_IS_APPROX(x, x_ref);
|
||||
}
|
||||
|
||||
struct hybrj_functor {
|
||||
static int f(int n, const double *x, double *fvec, double *fjac, int ldfjac,
|
||||
int iflag)
|
||||
{
|
||||
|
||||
/* subroutine fcn for hybrj example. */
|
||||
|
||||
int j, k;
|
||||
double one=1, temp, temp1, temp2, three=3, two=2, zero=0, four=4;
|
||||
|
||||
if (iflag == 0)
|
||||
{
|
||||
/* insert print statements here when nprint is positive. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (iflag != 2)
|
||||
{
|
||||
for (k=1; k <= n; k++)
|
||||
{
|
||||
temp = (three - two*x[k-1])*x[k-1];
|
||||
temp1 = zero;
|
||||
if (k != 1) temp1 = x[k-1-1];
|
||||
temp2 = zero;
|
||||
if (k != n) temp2 = x[k+1-1];
|
||||
fvec[k-1] = temp - temp1 - two*temp2 + one;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (k = 1; k <= n; k++)
|
||||
{
|
||||
for (j=1; j <= n; j++)
|
||||
{
|
||||
fjac[k-1 + ldfjac*(j-1)] = zero;
|
||||
}
|
||||
fjac[k-1 + ldfjac*(k-1)] = three - four*x[k-1];
|
||||
if (k != 1) fjac[k-1 + ldfjac*(k-1-1)] = -one;
|
||||
if (k != n) fjac[k-1 + ldfjac*(k+1-1)] = -two;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void testHybrj()
|
||||
{
|
||||
const int n=9;
|
||||
@ -412,7 +319,7 @@ void testHybrj()
|
||||
|
||||
}
|
||||
|
||||
struct hybrd1_functor {
|
||||
struct hybrd_functor {
|
||||
static int f(int n, const double *x, double *fvec, int /*iflag*/)
|
||||
{
|
||||
/* subroutine fcn for hybrd1 example. */
|
||||
@ -420,14 +327,14 @@ struct hybrd1_functor {
|
||||
int k;
|
||||
double one=1, temp, temp1, temp2, three=3, two=2, zero=0;
|
||||
|
||||
for (k=1; k <= n; k++)
|
||||
for (k=0; k < n; k++)
|
||||
{
|
||||
temp = (three - two*x[k-1])*x[k-1];
|
||||
temp = (three - two*x[k])*x[k];
|
||||
temp1 = zero;
|
||||
if (k != 1) temp1 = x[k-1-1];
|
||||
if (k) temp1 = x[k-1];
|
||||
temp2 = zero;
|
||||
if (k != n) temp2 = x[k+1-1];
|
||||
fvec[k-1] = temp - temp1 - two*temp2 + one;
|
||||
if (k != n-1) temp2 = x[k+1];
|
||||
fvec[k] = temp - temp1 - two*temp2 + one;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -442,7 +349,7 @@ void testHybrd1()
|
||||
x.setConstant(n, -1.);
|
||||
|
||||
// do the computation
|
||||
info = ei_hybrd1<hybrd1_functor,double>(x, fvec);
|
||||
info = ei_hybrd1<hybrd_functor,double>(x, fvec);
|
||||
|
||||
// check return value
|
||||
VERIFY( 1 == info);
|
||||
@ -456,33 +363,6 @@ void testHybrd1()
|
||||
VERIFY_IS_APPROX(x, x_ref);
|
||||
}
|
||||
|
||||
struct hybrd_functor {
|
||||
static int f(int n, const double *x, double *fvec, int iflag)
|
||||
{
|
||||
/* subroutine fcn for hybrd example. */
|
||||
|
||||
int k;
|
||||
double one=1, temp, temp1, temp2, three=3, two=2, zero=0;
|
||||
|
||||
if (iflag == 0)
|
||||
{
|
||||
/* insert print statements here when nprint is positive. */
|
||||
return 0;
|
||||
}
|
||||
for (k=1; k<=n; k++)
|
||||
{
|
||||
|
||||
temp = (three - two*x[k-1])*x[k-1];
|
||||
temp1 = zero;
|
||||
if (k != 1) temp1 = x[k-1-1];
|
||||
temp2 = zero;
|
||||
if (k != n) temp2 = x[k+1-1];
|
||||
fvec[k-1] = temp - temp1 - two*temp2 + one;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void testHybrd()
|
||||
{
|
||||
const int n=9;
|
||||
@ -517,8 +397,8 @@ void testHybrd()
|
||||
VERIFY_IS_APPROX(x, x_ref);
|
||||
}
|
||||
|
||||
struct lmstr1_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjrow, int iflag)
|
||||
struct lmstr_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjrow, int iflag)
|
||||
{
|
||||
/* subroutine fcn for lmstr1 example. */
|
||||
int i;
|
||||
@ -528,26 +408,24 @@ struct lmstr1_functor {
|
||||
|
||||
if (iflag < 2)
|
||||
{
|
||||
for (i=1; i<=15; i++)
|
||||
for (i=0; i<15; i++)
|
||||
{
|
||||
tmp1=i;
|
||||
tmp2 = 16-i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
fvec[i-1] = y[i-1] - (x[1-1] + tmp1/(x[2-1]*tmp2 + x[3-1]*tmp3));
|
||||
tmp1 = i+1;
|
||||
tmp2 = 16 - i - 1;
|
||||
tmp3 = (i>=8)? tmp2 : tmp1;
|
||||
fvec[i] = y[i] - (x[0] + tmp1/(x[1]*tmp2 + x[2]*tmp3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
i = iflag - 1;
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
tmp4 = (x[2-1]*tmp2 + x[3-1]*tmp3); tmp4=tmp4*tmp4;
|
||||
fjrow[1-1] = -1;
|
||||
fjrow[2-1] = tmp1*tmp2/tmp4;
|
||||
fjrow[3-1] = tmp1*tmp3/tmp4;
|
||||
i = iflag-2;
|
||||
tmp1 = i+1;
|
||||
tmp2 = 16 - i - 1;
|
||||
tmp3 = (i>=8)? tmp2 : tmp1;
|
||||
tmp4 = (x[1]*tmp2 + x[2]*tmp3); tmp4 = tmp4*tmp4;
|
||||
fjrow[0] = -1;
|
||||
fjrow[1] = tmp1*tmp2/tmp4;
|
||||
fjrow[2] = tmp1*tmp3/tmp4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -564,7 +442,7 @@ void testLmstr1()
|
||||
x.setConstant(n, 1.);
|
||||
|
||||
// do the computation
|
||||
info = ei_lmstr1<lmstr1_functor,double>(x, fvec, ipvt);
|
||||
info = ei_lmstr1<lmstr_functor,double>(x, fvec, ipvt);
|
||||
|
||||
// check return value
|
||||
VERIFY( 1 == info);
|
||||
@ -578,50 +456,6 @@ void testLmstr1()
|
||||
VERIFY_IS_APPROX(x, x_ref);
|
||||
}
|
||||
|
||||
|
||||
struct lmstr_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, double *fjrow, int iflag)
|
||||
{
|
||||
|
||||
/* subroutine fcn for lmstr example. */
|
||||
|
||||
int i;
|
||||
double tmp1, tmp2, tmp3, tmp4;
|
||||
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};
|
||||
|
||||
if (iflag == 0)
|
||||
{
|
||||
/* insert print statements here when nprint is positive. */
|
||||
return 0;
|
||||
}
|
||||
if (iflag < 2)
|
||||
{
|
||||
for (i = 1; i <= 15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
fvec[i-1] = y[i-1] - (x[1-1] + tmp1/(x[2-1]*tmp2 + x[3-1]*tmp3));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
i = iflag - 1;
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
tmp4 = (x[2-1]*tmp2 + x[3-1]*tmp3); tmp4 = tmp4*tmp4;
|
||||
fjrow[1-1] = -1.;
|
||||
fjrow[2-1] = tmp1*tmp2/tmp4;
|
||||
fjrow[3-1] = tmp1*tmp3/tmp4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void testLmstr()
|
||||
{
|
||||
const int m=15, n=3;
|
||||
@ -654,7 +488,7 @@ void testLmstr()
|
||||
|
||||
}
|
||||
|
||||
struct lmdif1_functor {
|
||||
struct lmdif_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, int /*iflag*/)
|
||||
{
|
||||
/* function fcn for lmdif1 example */
|
||||
@ -687,7 +521,7 @@ void testLmdif1()
|
||||
x.setConstant(n, 1.);
|
||||
|
||||
// do the computation
|
||||
info = ei_lmdif1<lmdif1_functor,double>(x, fvec);
|
||||
info = ei_lmdif1<lmdif_functor,double>(x, fvec);
|
||||
|
||||
// check return value
|
||||
VERIFY( 1 == info);
|
||||
@ -702,34 +536,6 @@ void testLmdif1()
|
||||
|
||||
}
|
||||
|
||||
struct lmdif_functor {
|
||||
static int f(int /*m*/, int /*n*/, const double *x, double *fvec, int iflag)
|
||||
{
|
||||
|
||||
/* subroutine fcn for lmdif example. */
|
||||
|
||||
int i;
|
||||
double tmp1, tmp2, tmp3;
|
||||
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};
|
||||
|
||||
if (iflag == 0)
|
||||
{
|
||||
/* insert print statements here when nprint is positive. */
|
||||
return 0;
|
||||
}
|
||||
for (i = 1; i <= 15; i++)
|
||||
{
|
||||
tmp1 = i;
|
||||
tmp2 = 16 - i;
|
||||
tmp3 = tmp1;
|
||||
if (i > 8) tmp3 = tmp2;
|
||||
fvec[i-1] = y[i-1] - (x[1-1] + tmp1/(x[2-1]*tmp2 + x[3-1]*tmp3));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
void testLmdif()
|
||||
{
|
||||
const int m=15, n=3;
|
||||
|
Loading…
Reference in New Issue
Block a user