# source:trunk/projects/slim-curve/src/main/c/GCI_Lsqnonneg.h@7607

Revision 7607, 1.6 KB checked in by paulbarber, 9 years ago (diff)

Added Non-negative least squares for spectral unmixing.

RevLine
[7607]1/* Header file for functions defined in lsqnonneg.c */
2
3/**********************************************************************
4   Function GCI_lsqnonneg
5
6   This function solves the non-negative least squares problem:
7   minimise |Ax-b| subject to x >= 0 (where |v| is the 2-norm of the
8   vector v).
9
10   Arguments: A, an m x n matrix, in the form double A[n][m], so
11                 the columns of A are A[0], A[1], ..., A[n-1]
12              b, the m-vector
13
14              !!! NB: A and B will both be modified unless preserve is
15              !!!     non-zero (see below).
16
17              x, the solution will be placed here
18              m ) the dimensions of A
19              n )
20              preserve, copy A and b before solving the problem
21              rnorm, (double *) the value of |Ax-b| with the
22                determined x if the function was successful or if the
23                iteration count was exceeded.  This can be NULL.
24              lambda, an n-vector which will contain the dual vector
25                 on completion (that is, the Lagrange multipliers).
26                 This can be NULL.
27
28   On exit:
29              The return value will be 0 on success, and negative if
30                a problem occurred:
31                -1: m > MAX_EQNS or m <= 0
32                -2: n > MAX_VARS or n <= 0
33                -3: iteration count exceeded: more than 3*n iterations
34                    performed
35                -4: memory allocation problems
36
37**********************************************************************/
38
39int GCI_lsqnonneg(double **A, double *b, double *x, int m, int n,
40                  int preserve, double *rnorm, double *lambda);
Note: See TracBrowser for help on using the repository browser.