GramSchmidt: The Gram-Schmidt algorithm

View source: R/cylinder3d.R

GramSchmidtR Documentation

The Gram-Schmidt algorithm


Generate a 3x3 orthogonal matrix using the Gram-Schmidt algorithm.


GramSchmidt(v1, v2, v3, order = 1:3)


v1, v2, v3

Three length 3 vectors (taken as row vectors).


The precedence order for the vectors; see Details.


This function orthogonalizes the matrix rbind(v1, v2, v3) using the Gram-Schmidt algorithm. It can handle rank 2 matrices (returning a rank 3 matrix). If the original is rank 1, it is likely to fail.

The order vector determines the precedence of the original vectors. For example, if it is c(i, j, k), then row i will be unchanged (other than normalization); row j will normally be transformed within the span of rows i and j. Row k will be transformed orthogonally to the span of the others.


A 3x3 matrix whose rows are the orthogonalization of the original row vectors.


Duncan Murdoch


# Proceed through the rows in order
print(A <- matrix(rnorm(9), 3, 3))
GramSchmidt(A[1, ], A[2, ], A[3, ])

# Keep the middle row unchanged
print(A <- matrix(c(rnorm(2), 0, 1, 0, 0, rnorm(3)), 3, 3, byrow = TRUE))
GramSchmidt(A[1, ], A[2, ], A[3, ], order = c(2, 1, 3))

rgl documentation built on June 10, 2022, 9:05 a.m.