Rev 68408 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/chol.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2015 R Core Team% Distributed under GPL 2 or later\name{chol}\alias{chol}\alias{chol.default}\title{The Choleski Decomposition}\description{Compute the Choleski factorization of a real symmetricpositive-definite square matrix.}\usage{chol(x, \dots)\method{chol}{default}(x, pivot = FALSE, LINPACK = FALSE, tol = -1, \dots)}\arguments{\item{x}{an object for which a method exists. The default methodapplies to numeric (or logical) symmetric, positive-definite matrices.}\item{\dots}{arguments to be based to or from methods.}\item{pivot}{Should pivoting be used?}\item{LINPACK}{logical. Should LINPACK be used (now ignored)?}\item{tol}{A numeric tolerance for use with \code{pivot = TRUE}.}}\value{The upper triangular factor of the Choleski decomposition, i.e., thematrix \eqn{R} such that \eqn{R'R = x} (see example).If pivoting is used, then two additional attributes\code{"pivot"} and \code{"rank"} are also returned.}\details{\code{chol} is generic: the description here applies to the defaultmethod.Note that only the upper triangular part of \code{x} is used, sothat \eqn{R'R = x} when \code{x} is symmetric.If \code{pivot = FALSE} and \code{x} is not non-negative definite anerror occurs. If \code{x} is positive semi-definite (i.e., some zeroeigenvalues) an error will also occur as a numerical tolerance is used.If \code{pivot = TRUE}, then the Choleski decomposition of a positivesemi-definite \code{x} can be computed. The rank of \code{x} isreturned as \code{attr(Q, "rank")}, subject to numerical errors.The pivot is returned as \code{attr(Q, "pivot")}. It is no longerthe case that \code{t(Q) \%*\% Q} equals \code{x}. However, setting\code{pivot <- attr(Q, "pivot")} and \code{oo <- order(pivot)}, itis true that \code{t(Q[, oo]) \%*\% Q[, oo]} equals \code{x},or, alternatively, \code{t(Q) \%*\% Q} equals \code{x[pivot,pivot]}. See the examples.The value of \code{tol} is passed to LAPACK, with negative valuesselecting the default tolerance of (usually) \code{nrow(x) *.Machine$double.neg.eps * max(diag(x)}. The algorithm terminates oncethe pivot is less than \code{tol}.Unsuccessful results from the underlying LAPACK code will result in anerror giving a positive error code: these can only be interpreted bydetailed study of the FORTRAN code.}\section{Warning}{The code does not check for symmetry.If \code{pivot = TRUE} and \code{x} is not non-negative definite thenthere will be a warning message but a meaningless result will occur.So only use \code{pivot = TRUE} when \code{x} is non-negative definiteby construction.}\source{This is an interface to the LAPACK routines \code{DPOTRF} and\code{DPSTRF},LAPACK is from \url{http://www.netlib.org/lapack} and its guide is listedin the references.}\references{Anderson. E. and ten others (1999)\emph{LAPACK Users' Guide}. Third Edition. SIAM.\crAvailable on-line at\url{http://www.netlib.org/lapack/lug/lapack_lug.html}.Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{chol2inv}} for its \emph{inverse} (without pivoting),\code{\link{backsolve}} for solving linear systems with uppertriangular left sides.\code{\link{qr}}, \code{\link{svd}} for related matrix factorizations.}\examples{( m <- matrix(c(5,1,1,3),2,2) )( cm <- chol(m) )t(cm) \%*\% cm #-- = 'm'crossprod(cm) #-- = 'm'# now for something positive semi-definitex <- matrix(c(1:5, (1:5)^2), 5, 2)x <- cbind(x, x[, 1] + 3*x[, 2])colnames(x) <- letters[20:22]m <- crossprod(x)qr(m)$rank # is 2, as it should be# chol() may fail, depending on numerical rounding:# chol() unlike qr() does not use a tolerance.try(chol(m))(Q <- chol(m, pivot = TRUE))## we can use this bypivot <- attr(Q, "pivot")crossprod(Q[, order(pivot)]) # recover m## now for a non-positive-definite matrix( m <- matrix(c(5,-5,-5,3), 2, 2) )try(chol(m)) # fails(Q <- chol(m, pivot = TRUE)) # warningcrossprod(Q) # not equal to m}\keyword{algebra}\keyword{array}