Class fit_nonlin_b (o2scl)¶
-
template<class vec_t = boost::numeric::ublas::vector<double>, class mat_t = boost::numeric::ublas::matrix<double>>
class fit_nonlin_b¶ Base routines for the nonlinear fitting classes.
Subclassed by o2scl::fit_nonlin< fit_fix_pars< bool_vec_t, gen_fit_funct<>, boost::numeric::ublas::vector< double >, boost::numeric::ublas::matrix< double > >, boost::numeric::ublas::vector< double >, boost::numeric::ublas::matrix< double > >, o2scl::fit_min< func_t, vec_t, mat_t >, o2scl::fit_nonlin< func_t, vec_t, mat_t >
Public Functions
-
inline fit_nonlin_b()¶
Public Members
-
double tol_rel_covar¶
The relative tolerance for the computation of the covariance matrix (default 0)
Protected Functions
-
inline double compute_actual_reduction(double fnorm0, double fnorm1)¶
Desc.
-
inline void compute_newton_direction(size_t n, const mat_t &r2, const permutation &perm2, const vec_t &qtf2, vec_t &x)¶
Desc.
-
inline void compute_newton_bound(size_t nd, size_t np, const mat_t &r2, const vec_t &x, double dxnorm, const permutation &perm, const vec_t &diag, vec_t &w)¶
Desc.
-
inline void compute_gradient_direction(size_t n, const mat_t &r, const permutation &p, const vec_t &qtf2, const vec_t &diag, vec_t &g)¶
Desc.
-
inline double scaled_enorm(const vec_t &d, size_t n, const vec_t &f)¶
Euclidean norm of vector
f
of lengthn
, scaled by vectord
.
-
inline void compute_rptdx(const mat_t &r2, const permutation &p, size_t N, vec_t &dx, vec_t &rptdx2)¶
Desc.
-
inline int qrsolv(size_t n, mat_t &r2, const permutation &p, const double lambda, const vec_t &diag2, const vec_t &qtb, vec_t &x, vec_t &sdiag2, vec_t &wa)¶
Compute the solution to a least squares system.
This function computes the solution to the least squares system phi=[ A x=b ,lambda D x=0 ]^2 where A is an M by N matrix,D is an N by N diagonal matrix,lambda is a scalar parameter and b is a vector of length M. The function requires the factorization of A into A=Q R P^T, where Q is an orthogonal matrix,R is an upper triangular matrix with diagonal elements of non-increasing magnitude and P is a permuation matrix. The system above is then equivalent to [ R z=Q^T b,P^T (lambda D) P z=0 ] where x=P z. If this system does not have full rank then a least squares solution is obtained. On output the function also provides an upper triangular matrix S such that P^T (A^T A+lambda^2 D^T D) P=S^T S Parameters, r: On input,contains the full upper triangle of R. On output the strict lower triangle contains the transpose of the strict upper triangle of S,and the diagonal of S is stored in sdiag. The full upper triangle of R is not modified. p: the encoded form of the permutation matrix P. column j of P is column p[j] of the identity matrix. lambda,diag: contains the scalar lambda and the diagonal elements of the matrix D qtb: contains the product Q^T b x: on output contains the least squares solution of the system wa: is a workspace of length N
-
inline void compute_newton_correction(size_t n, const mat_t &r2, const vec_t &sdiag2, const permutation &p, vec_t &x, double dxnorm, const vec_t &diag2, vec_t &w2)¶
Desc.
-
inline void lmpar(mat_t &r2, const permutation &perm2, const vec_t &qtf2, const vec_t &diag2, double delta2, double *par_inout, vec_t &newton2, vec_t &gradient2, vec_t &sdiag2, vec_t &x, vec_t &w2, size_t nparm, size_t ndata)¶
Determine Levenburg-Marquardt parameter.
-
inline void compute_trial_step(size_t N, vec_t &x, vec_t &dx, vec_t &trial)¶
Compute trial step, \( \mathrm{trial}=\mathrm{x}+\mathrm{dx} \).
-
inline int compute_diag(size_t nparm, size_t ndata, const mat_t &J, vec_t &diag_vec)¶
Compute the root of the sum of the squares of the columns of
J
.This computes
\[ \mathrm{diag\_vec}_j = \sqrt{\sum_{i=0}^{\mathrm{ndata}-1} J_{ij}} \]for \( 0\leq j \leq \mathrm{nparm}-1 \) . If any of the columns ofJ
is all zero, then the corresponding entry indiag_vec
is set to one instead.
-
inline int covariance(size_t m, size_t n, const mat_t &J, mat_t &covar, vec_t &norm, mat_t &r, vec_t &tau, permutation &perm, double epsrel)¶
Compute the covarance matrix
covar
given the JacobianJ
.Given a
m
byn
Jacobian matrixJ
(wherem
must not be less thann
), and a relative toleranceepsrel
, this function computes the entries of then
byn
covariance matrixcovar
. The allocation forcovar
must be performed beforehand.This function is basically the equivalent of the function
gsl_multifit_covar()
, but rewritten for generic vector and matrix types.The workspace
work1
is used here.
-
inline fit_nonlin_b()¶