MCHOL
Computes an upper triangular factorization of a real symmetric matrix A plus a diagonal matrix D, where D is determined sequentially during the Cholesky factorization in order to make A + D nonnegative definite.
Required Arguments
A  N by N symmetric matrix for which a Cholesky factorization is attempted. (Input)
Only elements in the upper triangle and diagonal of A are referenced.
IRANK  Rank of A + D. (Output)
R  N by N upper triangular matrix containing the R matrix from a Cholesky decomposition RTR of A + D. (Output)
The lower triangle of R is not referenced. If A is not needed, then R and A can share the same storage locations.
DMAX  Largest diagonal element of D. (Output)
If DMAX equals 0.0, then A is nonnegative definite, and R is a Cholesky factorization of A. If DMAX is positive, then A is indefinite, i.e., A has at least one negative eigenvalue. In this case, DMAX is an upper bound on the absolute value of the minimum eigenvalue.
IND  Index for subsequent computation of a descent direction in the case of a saddle point. (Output)
If IND = 0, then A is nonnegative definite. For positive IND, let e be a unit vector with IND‑th element 1 and remaining elements 0. The solution s of Rs = e is a direction of negative curvature, i.e., sT As is negative.
Optional Arguments
N  Order of the matrix. (Input)
Default: N = size (A,2).
LDA  Leading dimension of A exactly as specified in the dimension statement in the calling program. (Input)
Default: LDA = size (A,1).
TOL  Tolerance used in determining linear dependence. (Input)
TOL = 100 * AMACH(4) is a common choice. See documentation for routine AMACH.
Default: TOL = 1.e‑5 for single precision and 2.d –14 for double precision.
LDR  Leading dimension of R exactly as specified in the dimension statement in the calling program. (Input)
Default: LDR = size (R,1).
FORTRAN 90 Interface
Generic: CALL MCHOL (A, IRANK, R, DMAX, IND [])
Specific: The specific interface names are S_MCHOL and D_MCHOL.
FORTRAN 77 Interface
Single: CALL MCHOL (N, A, LDA, TOL, IRANK, R, LDR, DMAX, IND)
Double: The double precision name is DMCHOL.
Description
Routine MCHOL computes a Cholesky factorization, RTR, of A + D where A is symmetric and D is a diagonal matrix with sufficiently large diagonal elements such that A + D is nonnegative definite. The routine is similar to one described by Gill, Murray, and Wright (1981, pages 108111). Here, though, we allow A + D to be singular.
The algorithm proceeds sequentially by rows. If A + D is singular, the Cholesky factor R is taken to have some rows that are entirely zero. The i‑th row of A + D is declared to be linearly dependent on the first i  1 rows if the following two conditions are satisfied:
where ɛ is the input argument TOL.
The routine MCHOL is often used to find a descent direction in a minimization problem. Let A and g be the current Hessian and gradient, respectively, associated with the minimization problem. The solution s of As = g may not give a descent direction if A is not nonnegative definite. Instead, in order to guarantee a descent direction, a solution s of (A + D)s = g can be found where A + D is nonnegative definite. Routine MCHOL is useful for computing the upper triangular Cholesky factor R of A + D so that routine GIRTS can be invoked to compute the descent direction s by solving successively the two triangular linear systems RTx = g and Rs = x for x and then s. Also if g = 0 and A is not nonnegative definite, i.e., the current solution is a saddle point, GIRTS can be used to compute a descent direction s from the linear system Rs = e where e is a unit vector with
Examples
Example 1
A Cholesky factorization of a 5 × 5 symmetric nonnegative definite matrix is computed. Maindonald (1984, pages 8586) discusses the example.
 
! SPECIFICATIONS FOR PARAMETERS
USE MCHOL_INT
USE UMACH_INT
USE WRRRN_INT
 
IMPLICIT NONE
 
INTEGER LDA, LDR, N, J
PARAMETER (N=5, LDA=N, LDR=N)
!
INTEGER IND, IRANK, NOUT
REAL A(LDA,N), DMAX, R(LDR,N), TOL
!
DATA (A(1,J),J=1,N)/36.0, 12.0, 30.0, 6.0, 18.0/
DATA (A(2,J),J=1,N)/12.0, 20.0, 2.0, 10.0, 22.0/
DATA (A(3,J),J=1,N)/30.0, 2.0, 29.0, 1.0, 7.0/
DATA (A(4,J),J=1,N)/6.0, 10.0, 1.0, 14.0, 20.0/
DATA (A(5,J),J=1,N)/8.0, 22.0, 7.0, 20.0, 40.0/
!
TOL = 0.00001
CALL MCHOL (A, IRANK, R, DMAX, IND, TOL=TOL)
CALL UMACH (2, NOUT)
WRITE (NOUT,99998) ' IRANK = ', IRANK
WRITE (NOUT,99999) ' DMAX = ', DMAX
WRITE (NOUT,99998) ' IND = ', IND
99998 FORMAT (A, I3)
99999 FORMAT (A, 1PE10.3)
CALL WRRRN ('R', R)
END
Output
 
IRANK = 4
DMAX = 0.000E+00
IND = 0
 
R
1 2 3 4 5
1 6.000 2.000 5.000 1.000 3.000
2 0.000 4.000 -2.000 2.000 4.000
3 0.000 0.000 0.000 0.000 0.000
4 0.000 0.000 0.000 3.000 3.000
5 0.000 0.000 0.000 0.000 2.449
Example 2
A modified Cholesky factorization of a 3 × 3 symmetric indefinite matrix A is computed. A solution of Rs = e3 is also obtained using routine GIRTS. Note that sT As is negative as verified by using routine BLINF (IMSL MATH/LIBRARY). Gill, Murray, and Wright (1981, page 111) discuss the example.
 
! SPECIFICATIONS FOR PARAMETERS
USE IMSL_LIBRARIES
 
IMPLICIT NONE
 
INTEGER LDA, LDR, N, J
PARAMETER (N=3, LDA=N, LDR=N)
!
INTEGER IND, IRANK, NOUT
REAL A(LDA,N), DMAX, E(N,1), R(LDR,N), S(N, 1), SPAS, TOL
!
DATA (A(1,J),J=1,N)/1, 1, 2/
DATA (A(2,J),J=1,N)/1, 1, 3/
DATA (A(3,J),J=1,N)/2, 3, 1/
!
TOL = 0.00001
CALL MCHOL (A, IRANK, R, DMAX, IND, TOL=TOL)
CALL UMACH (2, NOUT)
WRITE (NOUT,99998) ' IRANK = ', IRANK
WRITE (NOUT,99999) ' DMAX = ', DMAX
WRITE (NOUT,99998) ' IND = ', IND
CALL WRRRN ('R', R)
IF (IND .GT. 0) THEN
E= 0.0
E(IND, 1) = 1.0
CALL GIRTS (R, E, IRANK, S)
SPAS = BLINF(A, S(:,1), S(:,1))
WRITE (NOUT,*) ' '
WRITE (NOUT,99999) ' trans(s)*A*s = ', SPAS
END IF
99998 FORMAT (A, I3)
99999 FORMAT (A, F10.3)
END
Output
 
IRANK = 3
DMAX = 5.016
IND = 3
 
R
1 2 3
1 1.942 0.515 1.030
2 0.000 2.398 1.030
3 0.000 0.000 1.059
 
trans(s)*A*s = -2.254