Matrices in R
Matrices
Singular value decomposition and determinants
The function svd(M) takes an arbitrary matrix argument, M,
and calculates the singular value decomposition of M. This
consists of a matrix of orthonormal columns U with the same
column space as M, a second matrix of orthonormal columns
V whose column space is the row space of M and a diagonal
matrix of positive entries D such that M = U %*% D %*% t(V). D is actually returned as a vector of the diagonal
elements. The result of svd(M) is actually a list of three
components named d, u and v, with evident meanings.
If M is in fact square, then, it is not hard to see that
> absdetM <- prod(svd(M)$d)
calculates the absolute value of the determinant of M. If this
calculation were needed often with a variety of matrices it could be
defined as an R function
> absdet <- function(M) prod(svd(M)$d)
after which we could use absdet() as just another R function.
As a further trivial but potentially useful example, you might like to
consider writing a function, say tr(), to calculate the trace of
a square matrix. [Hint: You will not need to use an explicit loop.
Look again at the diag() function.]
R has a builtin function det to calculate a determinant,
including the sign, and another, determinant, to give the sign
and modulus (optionally on log scale),