mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-04 11:10:40 +08:00
57 lines
1.1 KiB
C++
57 lines
1.1 KiB
C++
|
|
template<typename Scalar>
|
|
int lmdif1_template(minpack_func_mn fcn, void *p, int m, int n, Scalar *x,
|
|
Scalar *fvec, Scalar tol, int *iwa,
|
|
Scalar *wa, int lwa)
|
|
{
|
|
/* Initialized data */
|
|
|
|
const Scalar factor = 100.;
|
|
|
|
int mp5n, mode, nfev;
|
|
Scalar ftol, gtol, xtol;
|
|
Scalar epsfcn;
|
|
int maxfev, nprint;
|
|
int info;
|
|
|
|
/* Parameter adjustments */
|
|
--fvec;
|
|
--iwa;
|
|
--x;
|
|
--wa;
|
|
|
|
/* Function Body */
|
|
info = 0;
|
|
|
|
/* check the input parameters for errors. */
|
|
|
|
if (n <= 0 || m < n || tol < 0. || lwa < m * n + n * 5 + m) {
|
|
/* goto L10; */
|
|
return info;
|
|
}
|
|
|
|
/* call lmdif. */
|
|
|
|
maxfev = (n + 1) * 200;
|
|
ftol = tol;
|
|
xtol = tol;
|
|
gtol = 0.;
|
|
epsfcn = 0.;
|
|
mode = 1;
|
|
nprint = 0;
|
|
mp5n = m + n * 5;
|
|
info = lmdif(fcn, p, m, n, &x[1], &fvec[1], ftol, xtol, gtol, maxfev,
|
|
epsfcn, &wa[1], mode, factor, nprint, &nfev, &wa[mp5n +
|
|
1], m, &iwa[1], &wa[n + 1], &wa[(n << 1) + 1], &wa[n * 3 + 1],
|
|
&wa[(n << 2) + 1], &wa[n * 5 + 1]);
|
|
if (info == 8) {
|
|
info = 4;
|
|
}
|
|
/* L10: */
|
|
return info;
|
|
|
|
/* last card of subroutine lmdif1. */
|
|
|
|
} /* lmdif1_ */
|
|
|