MD03BX

QR factorization with column pivoting for a standard nonlinear least squares problem

[Specification] [Arguments] [Method] [References] [Comments] [Example]

Purpose

  To compute the QR factorization with column pivoting of an
  m-by-n matrix J (m >= n), that is, J*P = Q*R, where Q is a matrix
  with orthogonal columns, P a permutation matrix, and R an upper
  trapezoidal matrix with diagonal elements of nonincreasing
  magnitude, and to apply the transformation Q' on the error
  vector e (in-situ). The 1-norm of the scaled gradient is also
  returned. The matrix J could be the Jacobian of a nonlinear least
  squares problem.

Specification
      SUBROUTINE MD03BX( M, N, FNORM, J, LDJ, E, JNORMS, GNORM, IPVT,
     $                   DWORK, LDWORK, INFO )
C     .. Scalar Arguments ..
      INTEGER           INFO, LDJ, LDWORK, M, N
      DOUBLE PRECISION  FNORM, GNORM
C     .. Array Arguments ..
      INTEGER           IPVT(*)
      DOUBLE PRECISION  DWORK(*), E(*), J(*), JNORMS(*)

Arguments

Input/Output Parameters

  M       (input) INTEGER
          The number of rows of the Jacobian matrix J.  M >= 0.

  N       (input) INTEGER
          The number of columns of the Jacobian matrix J.
          M >= N >= 0.

  FNORM   (input) DOUBLE PRECISION
          The Euclidean norm of the vector e.  FNORM >= 0.

  J       (input/output) DOUBLE PRECISION array, dimension (LDJ, N)
          On entry, the leading M-by-N part of this array must
          contain the Jacobian matrix J.
          On exit, the leading N-by-N upper triangular part of this
          array contains the upper triangular factor R of the
          Jacobian matrix. Note that for efficiency of the later
          calculations, the matrix R is delivered with the leading
          dimension MAX(1,N), possibly much smaller than the value
          of LDJ on entry.

  LDJ     (input/output) INTEGER
          The leading dimension of array J.
          On entry, LDJ >= MAX(1,M).
          On exit,  LDJ >= MAX(1,N).

  E       (input/output) DOUBLE PRECISION array, dimension (M)
          On entry, this array must contain the error vector e.
          On exit, this array contains the updated vector Q'*e.

  JNORMS  (output) DOUBLE PRECISION array, dimension (N)
          This array contains the Euclidean norms of the columns of
          the Jacobian matrix, considered in the initial order.

  GNORM   (output) DOUBLE PRECISION
          If FNORM > 0, the 1-norm of the scaled vector
          J'*Q'*e/FNORM, with each element i further divided by
          JNORMS(i) (if JNORMS(i) is nonzero).
          If FNORM = 0, the returned value of GNORM is 0.

  IPVT    (output) INTEGER array, dimension (N)
          This array defines the permutation matrix P such that
          J*P = Q*R. Column j of P is column IPVT(j) of the identity
          matrix.

Workspace
  DWORK   DOUBLE PRECISION array, dimension (LDWORK)
          On exit, if INFO = 0, DWORK(1) returns the optimal value
          of LDWORK.

  LDWORK  INTEGER
          The length of the array DWORK.
          LDWORK >= 1,      if N = 0 or M = 1;
          LDWORK >= 4*N+1,  if N > 1.
          For optimum performance LDWORK should be larger.

Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value.

Method
  The algorithm uses QR factorization with column pivoting of the
  matrix J, J*P = Q*R, and applies the orthogonal matrix Q' to the
  vector e.

Further Comments
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index