GramSchmidt.Rd
Generate a 3x3 orthogonal matrix using the Gram-Schmidt algorithm.
GramSchmidt(v1, v2, v3, order = 1:3)
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.
# Proceed through the rows in order
print(A <- matrix(rnorm(9), 3, 3))
#> [,1] [,2] [,3]
#> [1,] -0.8074924 0.1737682 -1.5408661
#> [2,] 0.9076540 0.0719223 1.2413485
#> [3,] 0.7820587 -0.2130351 -0.6859608
GramSchmidt(A[1, ], A[2, ], A[3, ])
#> [,1] [,2] [,3]
#> v1 -0.4618763 0.09939337 -0.8813576
#> v2 0.6655128 0.69572155 -0.2703040
#> v3 0.5863131 -0.71140178 -0.3874849
# Keep the middle row unchanged
print(A <- matrix(c(rnorm(2), 0, 1, 0, 0, rnorm(3)), 3, 3, byrow = TRUE))
#> [,1] [,2] [,3]
#> [1,] 1.1137372 -1.0624995 0.0000000
#> [2,] 1.0000000 0.0000000 0.0000000
#> [3,] -0.2092996 -0.6374341 -0.8528405
GramSchmidt(A[1, ], A[2, ], A[3, ], order = c(2, 1, 3))
#> [,1] [,2] [,3]
#> v2 0 -1 0
#> v1 1 0 0
#> v3 0 0 -1