Carries out simple Gram-Schmidt orthogonalization of a matrix.
Treating the columns of the matrix X
in the given order,
each successive column after the first is made orthogonal to all
previous columns by subtracting their projections on the current
column.
GramSchmidt(X, normalize = TRUE, verbose = FALSE)
a matrix
logical; should the resulting columns be normalized to unit length?
logical; if TRUE
, print intermediate steps
A matrix of the same size as X
, with orthogonal columns
# NOT RUN {
(xx <- matrix(c( 1:3, 3:1, 1, 0, -2), 3, 3))
crossprod(xx)
(zz <- GramSchmidt(xx, normalize=FALSE))
zapsmall(crossprod(zz))
# normalized
(zz <- GramSchmidt(xx))
zapsmall(crossprod(zz))
# print steps
GramSchmidt(xx, verbose=TRUE)
# non-invertible matrix; hence, its basis is not orthonormal
(xx <- matrix(c( 1:3, 3:1, 1, 0, -1), 3, 3))
crossprod(xx)
(zz <- GramSchmidt(xx))
zapsmall(crossprod(zz))
# }
Run the code above in your browser using DataLab