## SG02CX

### Line search parameter minimizing the residual of (generalized) continuous- or discrete-time algebraic Riccati equations

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

Purpose

      To find the line search parameter alpha minimizing the Frobenius
      norm (in a MATLAB-style notation)

         P(alpha) := norm(R(X+alpha*S), 'fro')
                   = norm((1-alpha)*R(X) +/- alpha^2*V, 'fro'),

      where R(X) is the residual of a (generalized) continuous-time
      algebraic Riccati equation

         0 = op(A)'*X + X*op(A) +/- X*G*X + Q  =:  R(X),
      or
         0 = op(A)'*X*op(E) + op(E)'*X*op(A) +/- op(E)'*X*G*X*op(E) + Q
           =:  R(X),

      V = op(E)'*S*G*S*op(E), and op(W) is either W or W'. The matrix S
      is the Newton step.
                                                      _-1
      Instead of the symmetric N-by-N matrix G, G = B*R  *B', the N-by-M
                       -1
      matrix D, D = B*L  , such that G = D*D', may be given on entry.
                 _  _
      The matrix R, R = L'*L, is a weighting matrix of the optimal
      problem, and L is its (Cholesky) factor.

      Optionally, V is specified as V = H*K, or V = F*F', but F or H and
      K must be evaluated in S. See the SLICOT Library routine SG02CW
      description for more details.

Specification

          SUBROUTINE SG02CX( JOBE, FLAG, JOBG, UPLO, TRANS, N, M, E, LDE, R,
         $                   LDR, S, LDS, G, LDG, ALPHA, RNORM, DWORK,
         $                   LDWORK, IWARN, INFO )
    C     .. Scalar Arguments ..
          CHARACTER         FLAG, JOBE, JOBG, TRANS, UPLO
          INTEGER           INFO, IWARN, LDE, LDG, LDR, LDS, LDWORK, M, N
          DOUBLE PRECISION  ALPHA, RNORM
    C     .. Array Arguments ..
          DOUBLE PRECISION  DWORK(*), E(LDE,*), G(LDG,*), R(LDR,*), S(LDS,*)

Arguments

Mode Parameters

      JOBE    CHARACTER*1
              Specifies whether E is a general or an identity matrix,
              as follows:
              = 'G':  The matrix E is general and is given;
              = 'I':  The matrix E is assumed identity and is not given.

      FLAG    CHARACTER*1
              Specifies which sign is used, as follows:
              = 'P':  The plus sign is used;
              = 'M':  The minus sign is used.

      JOBG    CHARACTER*1
              Specifies how the matrix product V is defined, as follows:
              = 'G':  The matrix G is given:  V = op(E)'*S*G*S*op(E);
              = 'D':  The matrix D is given:  V = op(E)'*S*D*D'*S*op(E);
              = 'F':  The matrix F is given:           V = F*F';
              = 'H':  The matrices H and K are given:  V = H*K.

      UPLO    CHARACTER*1
              Specifies which triangles of the symmetric matrices R, G,
              if JOBG = 'G', and S, if JOBG = 'G' or JOBG = 'D', are
              given, as follows:
              = 'U':  The upper triangular part is given;
              = 'L':  The lower triangular part is given.

      TRANS   CHARACTER*1
              Specifies the form of op(W) to be used in the matrix
              multiplication, as follows:
              = 'N':  op(W) = W;
              = 'T':  op(W) = W';
              = 'C':  op(W) = W'.

Input/Output Parameters

      N       (input) INTEGER
              The order of the matrices E, R, and S.  N >= 0.

      M       (input) INTEGER
              If JOBG <> 'G', the number of columns of the matrices D,
              F, or K'.  M >= 0.
              If JOBG = 'G', the value of M is meaningless.

      E       (input) DOUBLE PRECISION array, dimension (LDE,*)
              If JOBE = 'G' and (JOBG = 'G' or JOBG = 'D'), the leading
              N-by-N part of this array must contain the matrix E.
              If JOBE = 'I' or JOBG = 'F' or JOBG = 'H', this array is
              not referenced.

      LDE     INTEGER
              The leading dimension of array E.
              LDE >= MAX(1,N), if JOBE = 'G' and (JOBG = 'G' or
                                                  JOBG = 'D');
              LDE >= 1,        if JOBE = 'I'  or  JOBG = 'F' or
                                                  JOBG = 'H'.

      R       (input) DOUBLE PRECISION array, dimension (LDR,N)
              The leading N-by-N upper or lower triangular part
              (depending on UPLO) of this array must contain the upper
              or lower triangular part, respectively, of the matrix
              R(X), the residual of the algebraic Riccati equation.
              The other strictly triangular part is not referenced.

      LDR     INTEGER
              The leading dimension of array R.  LDR >= MAX(1,N).

      S       (input) DOUBLE PRECISION array, dimension (LDS,*)
              If JOBG = 'G' or JOBG = 'D', the leading N-by-N part of
              this array must contain the symmetric Newton step
              matrix S. If JOBE = 'I', the full matrix must be given.
              Otherwise, it is sufficient to input only the triangular
              part specified by UPLO, and the remaining strictly
              triangular part is not referenced.
              If JOBG = 'F', this array is not referenced.
              If JOBG = 'H', the leading M-by-N part of this array must
              contain the matrix K.

      LDS     INTEGER
              The leading dimension of array S.
              LDS >= MAX(1,N), if JOBG =  'G' or JOBG =  'D';
              LDS >= 1,        if JOBG =  'F';
              LDS >= MAX(1,M), if JOBG =  'H'.

      G       (input/works.) DOUBLE PRECISION array, dimension (LDG,*)
              If JOBG = 'G', the leading N-by-N upper or lower
              triangular part (depending on UPLO) of this array must
              contain the upper or lower triangular part, respectively,
              of the matrix G. The other strictly triangular part is not
              referenced. The diagonal elements of this array are
              modified internally, but are restored on exit.
              If JOBG = 'D', the leading N-by-M part of this array must
              contain the matrix D, so that G = D*D'.
              If JOBG = 'F', the leading N-by-M part of this array must
              contain the matrix F.
              If JOBG = 'H', leading N-by-M part of this array must
              contain the matrix H.

      LDG     INTEGER
              The leading dimension of array G.  LDG >= MAX(1,N).

      ALPHA   (output) DOUBLE PRECISION
              If INFO = 0, ALPHA contains the real number alpha which
              minimizes  P(alpha) = norm(R(X+alpha*S), 'fro') in the
              interval [0,2].
              If INFO = 1 or IWARN = 2, ALPHA is set equal to 1.

      RNORM   (output) DOUBLE PRECISION
              On exit, if INFO >= 0, RNORM contains the Frobenius norm
              of the residual R(X+alpha*S).

Workspace

      DWORK   DOUBLE PRECISION array, dimension (LDWORK)
              On exit, if LDWORK = -1 on input, then DWORK(1) returns
              the optimal value of LDWORK.
              On exit, if LDWORK = -2 on input or INFO = -19, then
              DWORK(1) returns the minimal value of LDWORK.
              On exit, if INFO = 0, the leading N-by-N upper or lower
              triangular part (depending on UPLO) of this array contains
              the corresponding triangular part of the matrix V.

      LDWORK  The length of the array DWORK.
              LDWORK >= N*N + MAX( 2*N*N, 51 ),
                                        if JOBG = 'G' and JOBE = 'G';
              LDWORK >= N*N + MAX( N*N, 51 ),
                                        if JOBG = 'G' and JOBE = 'I',
                                        or JOBG = 'F', or JOBG = 'H';
              LDWORK >= N*N + MAX( MAX( N*N, 51 ), MIN( 2*N*N, N*M ) ),
                                        if JOBG = 'D' and JOBE = 'G';
              LDWORK >= N*N + MAX( N*N, N*M, 51 ),
                                        if JOBG = 'D' and JOBE = 'I'.
              For M <= N, the last two formulas simplify to
              LDWORK >= N*N + MAX( N*N, 51).

              If LDWORK = -1, an optimal workspace query is assumed; the
              routine only calculates the optimal size of the DWORK
              array, returns this value as the first entry of the DWORK
              array, and no error message is issued by XERBLA.

              If LDWORK = -2, a minimal workspace query is assumed; the
              routine only calculates the minimal size of the DWORK
              array, returns this value as the first entry of the DWORK
              array, and no error message is issued by XERBLA.

Warning Indicator

      IWARN   INTEGER
              = 0:  no warnings;
              = 2:  no optimal line search parameter t := alpha in [0,2]
                    was found; t = 1 was set.

Error Indicator

      INFO    INTEGER
              = 0:  successful exit;
              < 0:  if INFO = -k, the k-th argument had an illegal
                    value;
              = 1:  an error occurred during the call of the SLICOT
                    Library routine MC01XD: the eigenvalues computation
                    for the 3-by-3 (generalized) eigenproblem failed.
                    ALPHA and RNORM are set as specified above.

Method

      The matrix V is computed with the suitable formula, and used to
      set up a third order polynomial whose roots in [0,2], if any, are
      candidates for the solution of the minimum residual problem.
      The roots of the polynomial are computed by solving an equivalent
      3-by-3 (generalized) eigenproblem.

References

      [1] Benner, P.
          Contributions to the Numerical Solution of Algebraic
          Riccati Equations and Related Eigenvalue Problems.
          Fakultat fur Mathematik, Technische Universitat Chemnitz-
          Zwickau, D-09107 Chemnitz, Germany, Feb. 1997.

Numerical Aspects

      The calculations are backward stable. The computational effort is
      of the order of c*N**2*M operations. Here, M = N, if JOBG = 'G',
      and the coefficient c varies between 0.5 and 2.5, depending on
      JOBE and JOBG. (An "operation" includes a multiplication, an
      addition, and some address calculations.)
      The computed value of norm(R(X+alpha*S),'fro'), returned in RNORM,
      could be inaccurate if R(X) is small, since then subtraction
      cancellation could appear in the updating formula which is used.
      (This can happen, e.g., when solving a Riccati equation by
      Newton's method with line search, since then the sequence of R(.)
      tends to zero.) In such a case, it is better to recompute the
      residual from the data.

Further Comments

      The routine does not ckeck if the matrix S is zero, when a quick
      return with ALPHA = 1 is possible.
      With suitable input arguments E and G, this routine may also be
      used for discrete-time algebraic Riccati equations. (Matrix E
      must be the current closed-loop matrix.)

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to index