diff --git a/unsupported/Eigen/src/NonLinear/lmder.h b/unsupported/Eigen/src/NonLinear/lmder.h index 1d02c3684..dd43d8d7b 100644 --- a/unsupported/Eigen/src/NonLinear/lmder.h +++ b/unsupported/Eigen/src/NonLinear/lmder.h @@ -215,13 +215,8 @@ L200: /* determine the levenberg-marquardt parameter. */ ipvt.cwise()+=1; // lmpar() expects the fortran convention (as qrfac provides) -#if 1 ei_lmpar(n, fjac.data(), ldfjac, ipvt.data(), diag.data(), qtf.data(), delta, - &par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); -#else - lmpar(n, fjac.data(), ldfjac, ipvt.data(), diag.data(), qtf.data(), delta, - &par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); -#endif + par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); ipvt.cwise()-=1; /* store the direction p and x + p. calculate the norm of p. */ diff --git a/unsupported/Eigen/src/NonLinear/lmdif.h b/unsupported/Eigen/src/NonLinear/lmdif.h index 19af2005c..7e89de16e 100644 --- a/unsupported/Eigen/src/NonLinear/lmdif.h +++ b/unsupported/Eigen/src/NonLinear/lmdif.h @@ -219,7 +219,7 @@ L200: ipvt.cwise()+=1; // lmpar() expects the fortran convention (as qrfac provides) ei_lmpar(n, fjac.data(), ldfjac, ipvt.data(), diag.data(), qtf.data(), delta, - &par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); + par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); ipvt.cwise()-=1; /* store the direction p and x + p. calculate the norm of p. */ diff --git a/unsupported/Eigen/src/NonLinear/lmpar.h b/unsupported/Eigen/src/NonLinear/lmpar.h index 1c21fd7d3..32af22c49 100644 --- a/unsupported/Eigen/src/NonLinear/lmpar.h +++ b/unsupported/Eigen/src/NonLinear/lmpar.h @@ -2,7 +2,7 @@ template void ei_lmpar(int n, Scalar *r__, int ldr, const int *ipvt, const Scalar *diag, const Scalar *qtb, Scalar delta, - Scalar *par, Scalar *x, Scalar *sdiag, Scalar *wa1, + Scalar &par, Scalar *x, Scalar *sdiag, Scalar *wa1, Scalar *wa2) { /* System generated locals */ @@ -142,10 +142,10 @@ L120: /* if the input par lies outside of the interval (parl,paru), */ /* set par to the closer endpoint. */ - *par = std::max(*par,parl); - *par = std::min(*par,paru); - if (*par == 0.) { - *par = gnorm / dxnorm; + par = std::max(par,parl); + par = std::min(par,paru); + if (par == 0.) { + par = gnorm / dxnorm; } /* beginning of an iteration. */ @@ -155,12 +155,12 @@ L150: /* evaluate the function at the current value of par. */ - if (*par == 0.) { + if (par == 0.) { /* Computing MAX */ d__1 = dwarf, d__2 = Scalar(.001) * paru; - *par = std::max(d__1,d__2); + par = std::max(d__1,d__2); } - temp = ei_sqrt(*par); + temp = ei_sqrt(par); for (j = 1; j <= n; ++j) { wa1[j] = temp * diag[j]; /* L160: */ @@ -211,17 +211,17 @@ L200: /* depending on the sign of the function, update parl or paru. */ if (fp > 0.) { - parl = std::max(parl,*par); + parl = std::max(parl,par); } if (fp < 0.) { - paru = std::min(paru,*par); + paru = std::min(paru,par); } /* compute an improved estimate for par. */ /* Computing MAX */ - d__1 = parl, d__2 = *par + parc; - *par = std::max(d__1,d__2); + d__1 = parl, d__2 = par + parc; + par = std::max(d__1,d__2); /* end of an iteration. */ @@ -231,7 +231,7 @@ L220: /* termination. */ if (iter == 0) { - *par = 0.; + par = 0.; } return; diff --git a/unsupported/Eigen/src/NonLinear/lmstr.h b/unsupported/Eigen/src/NonLinear/lmstr.h index d05dc1ece..a96eaccb1 100644 --- a/unsupported/Eigen/src/NonLinear/lmstr.h +++ b/unsupported/Eigen/src/NonLinear/lmstr.h @@ -242,7 +242,7 @@ L240: /* determine the levenberg-marquardt parameter. */ ipvt.cwise()+=1; // lmpar() expects the fortran convention (as qrfac provides) - ei_lmpar(n, fjac.data(), ldfjac, ipvt.data(), diag.data(), qtf.data(), delta, &par, + ei_lmpar(n, fjac.data(), ldfjac, ipvt.data(), diag.data(), qtf.data(), delta, par, wa1.data(), wa2.data(), wa3.data(), wa4.data()); ipvt.cwise()-=1;