Skip to content

sgsokol/nlsic_py

Repository files navigation

NLSIC stands for "Non-linear Least Squares with Inequality Constraints". This algorithm was first published in Sokol et al. (2012) <doi:10.1093/bioinformatics/btr716>. His advantage is in combination of the following features:

  • Jacobi matrix J is not squared, i.e. J^tJ is not calculated, thus preserving the solution from condition number degradation. Instead, QR decomposition is used;
  • taking into account inequality constraints is based on a well known NNLS algorithm by Lawson and Hanson;
  • convergence in non-linear iterations is globalized by back-tracking method. I.e. with enough iterations, the process will reach a convergence point but no guaranty is given that it will be a global minimum;
  • if J is rank deficient, a least norm (also known as "minimum norm") increment is used. To find such increment exactly (not just a regularized one) in presence of inequality constraints is not a trivial task. We use our own algorithm implemented in lsi_ln(...) function;
  • if an initial approximation for a solution vector is outside of feasibility domain (FD) defined by inequality constraints then it is first projected on the FD (cf. ldp(...)) and the non-linear iterations start afterward.

This python implementation is an adaptation of the R one which is distributed with influx_si software. The original R version is in advance on this one. So users desiring to catch with the latest developments are invited to switch to the R version.

The main function to call is nlsic(...).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published