BCLS: Bound Constrained Least Squares

Version 0.1

bccgls.c File Reference

#include <cblas.h>
#include <string.h>
#include <assert.h>
#include <float.h>
#include "bcls.h"
#include "bclib.h"
#include "bccgls.h"

Include dependency graph for bccgls.c:

Go to the source code of this file.

Functions

static void aprod_free (BCLS *ls, const int mode, const int m, const int nFree, double dxFree[], double y[])
 Mat-vec routine called by CGLS.
static int bcls_cgls (BCLS *ls, int m, int n, int kmax, double tol, double damp, double c[], double x[], double r[], double s[], double p[], int *itns, double *opt, FILE *nout)
 CG for least squares.
int bcls_newton_step_cgls (BCLS *ls, int m, int nFree, int ix[], double damp, int itnLim, double tol, double dxFree[], double x[], double c[], double r[], int *itns, double *opt)
 Compute a Newton step using CGLS.


Detailed Description

This file implements conjugate gradients for the normal equations (CGLS).

Definition in file bccgls.c.


Function Documentation

static void aprod_free ( BCLS ls,
const int  mode,
const int  m,
const int  nFree,
double  dxFree[],
double  y[] 
) [static]

Mat-vec routine called by CGLS.

CGLS call this routine, which in turn calls bcls_aprod:

This routine is declared "static" so that it won't be confused with the user's own Aprod routine.

Parameters:
[in,out] ls BCLS solver context.
[in] mode Specifies if the product with A or A' is required.
[in] m Number of rows in A.
[in] nFree Length of dxFree (and ix which is recovered via ls).
[in,out] dxFree RHS or LHS (depending on the mode).
[in,out] y RHS or LHS (depending on the mode).

Definition at line 67 of file bccgls.c.

References bcls_aprod(), bcls_gather(), BCLS_PROD_A, BCLS_PROD_At, bcls_scatter(), BCLS::dx, and BCLS::ix.

Referenced by bcls_cgls().

Here is the call graph for this function:

static int bcls_cgls ( BCLS ls,
int  m,
int  n,
int  kmax,
double  tol,
double  damp,
double  c[],
double  x[],
double  r[],
double  s[],
double  p[],
int *  itns,
double *  opt,
FILE *  nout 
) [static]

CG for least squares.

This routine implements CG for solving the symmetric linear system

( N'N + damp I ) x = N'r + c

where N is an m-by-n submatrix of the general matrix A. This implementation is adapted from Hestenes and Stiefel's CG for least-squares method to accomodate the damping term and the additional vector on the RHS. (See, eg, Bjork, Numerical Methods for Least-Squares Problems, 1996, p. 289.)

Parameters:
[in,out] ls BCLS solver context.
[in] m No. of rows in A.
[in] n No. of cols in A.
[in] kmax Maximum no. of CG iterations.
[in] tol Required optimality tolerance:
  • norm( A'A x - A'b ) / norm(A'b)
[in] damp Regularization term on x.
[in] c Additional vector (set NULL if not present).
[out] x Solution vector.
[in,out] r On entry, r must be defined.
On exit, r is the residual.
[in,out] s Work vector.
[in,out] p Work vector.
[out] itns No. of CG iterations.
[out] opt Relative residual (see tol, above).
[in] nout File for log output (set NULL if not needed).
Returns:
  • 0: Required accuracy was achieved.
  • 1: The iteration limit (kmax) was reached.
  • 2: N'N appears to be singular.
Todo:
Update normx rather than recompute at each iteration.

Definition at line 129 of file bccgls.c.

References aprod_free(), bcls_dload(), BCLS_PROD_A, BCLS_PROD_At, cblas_daxpy(), cblas_dcopy(), cblas_dnrm2(), and cblas_dscal().

Referenced by bcls_newton_step_cgls().

Here is the call graph for this function:

int bcls_newton_step_cgls ( BCLS ls,
int  m,
int  nFree,
int  ix[],
double  damp,
int  itnLim,
double  tol,
double  dxFree[],
double  x[],
double  c[],
double  r[],
int *  itns,
double *  opt 
)

Compute a Newton step using CGLS.

See the description of bcls_newton_step.

Parameters:
[in,out] ls BCLS solver context
[in] m No. of rows in A.
[in] nFree No. of free columns, i.e., no. of cols in N.
[in] ix Index of vars for which a Newton step is computed.
[in] damp Regularization term on dxFree.
[in] itnLim Maximum no. of CG iterations.
[in] tol Required optimality tolerance:
  • norm( N'N x - N'b ) / norm(N'b).
[in] dxFree Newton direction in the free vars (len = nFree).
[in] x Current iterate.
[in] c Linear term. (Set to NULL if not present.)
[in,out] r On entry, r is current residual: r = b - Ax.
Will be used as workspace.
[in] itns No. of CG iterations.
[in] opt Relative residual (see tol, above).
Returns:
The termination flag returned by bcls_cgls.

Definition at line 258 of file bccgls.c.

References bcls_cgls(), bcls_gather(), cblas_dscal(), BCLS::minor_file, BCLS::wrk_u, BCLS::wrk_v, and BCLS::wrk_w.

Referenced by bcls_newton_step().

Here is the call graph for this function:

Generated on Sun Mar 4 22:50:03 2007 by Doxygen 1.5.1