Learn R Programming

corpcor (version 1.1.2)

rank.condition: Positive Definiteness of a Matrix, Rank and Condition Number

Description

is.positive.definite tests whether all eigenvalues of a symmetric matrix are positive. make.positive.definite computes the nearest positive definite of a real symmetric matrix, using the algorithm of NJ Higham (1988, Linear Algebra Appl. 103:103-118).

rank.condition estimates the rank and the condition of a matrix by computing its singular values D[i] (using svd). The rank of the matrix is the number of singular values D[i] > tol) and the condition is the ratio of the largest and the smallest singular value. Note that the definition tol= max(dim(m))*max(D)*.Machine$double.eps ensures that the same results are obtained as in Octave or in Matlab.

Usage

is.positive.definite(m, tol, method=c("eigen", "chol"))
make.positive.definite(m, tol)
rank.condition(m, tol)

Arguments

m
matrix
tol
tolerance for singular values and for absolute eigenvalues - only those with values larger than tol are considered non-zero (default: tol = max(dim(m))*max(D)*.Machine$double.eps)
method
Determines the method to check for positive definiteness: eigenvalue computation (eigen, default) or Cholesky decomposition (chol).

Value

  • is.positive.definite returns a logical value (TRUE or FALSE). rank.condition returns a list object with the following components:
  • rankRank of the matrix.
  • conditionCondition number.
  • tolTolerance.
  • make.positive.definite returns a symmetric positive definite matrix.

See Also

svd, pseudoinverse.

Examples

Run this code
# load corpcor library
library("corpcor")

# Hilbert matrix
hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, "+") }

# positive definite ?
m <- hilbert(8)
is.positive.definite(m)

# numerically ill-conditioned
m <- hilbert(15)
rank.condition(m)

# make positive definite
m2 <- make.positive.definite(m)
is.positive.definite(m2)
rank.condition(m2)
m2 - m

Run the code above in your browser using DataLab