Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

rRotationMatrix

Random rotation matrix


Description

Generate a random rotation matrix, i.e., a matrix P = (p[i,j]), i=1,…,p, j=1,…,p, which satisfies

a) P * P' = I,

b) P' * P = I,

c) det(P) = 1.

Usage

rRotationMatrix(n, dim)

Arguments

n

number of matrices to generate.

dim

dimension of a generated matrix/matrices.

Details

For dim = 2, p[2,1] (sin(theta)) is generated from Unif(0, 1) and the rest computed as follows: p[1,1] = p[2,2] = sqrt(1 - p[2,1]^2) (cos(theta)) and p[1,2] = p[2,1] (-sin(theta)).

For dim > 2, the matrix P is generated in the following steps:

1) Generate a p x p matrix A with independent Unif(0, 1) elements and check whether A is of full rank p.

2) Computes a QR decomposition of A, i.e., A = QR where Q satisfies Q * Q' = I, Q' * Q = I, det(Q) = (-1)^{p+1}, and columns of Q spans the linear space generated by the columns of A.

3) For odd dim, return matrix Q. For even dim, return corrected matrix Q to satisfy the determinant condition.

Value

For n=1, a matrix is returned.

For n>1, a list of matrices is returned.

Author(s)

References

Golub, G. H. and Van Loan, C. F. (1996, Sec. 5.1). Matrix Computations. Third Edition. Baltimore: The Johns Hopkins University Press.

Examples

P <- rRotationMatrix(n=1, dim=5)
print(P)
round(P %*% t(P), 10)
round(t(P) %*% P, 10)
det(P)

n <- 10
P <- rRotationMatrix(n=n, dim=5)
for (i in 1:3){
  cat(paste("*** i=", i, "\n", sep=""))
  print(P[[i]])
  print(round(P[[i]] %*% t(P[[i]]), 10))
  print(round(t(P[[i]]) %*% P[[i]], 10))
  print(det(P[[i]]))
}

mixAK

Multivariate Normal Mixture Models and Mixtures of Generalized Linear Mixed Models Including Model Based Clustering

v5.3
GPL (>= 3)
Authors
Arnošt Komárek <arnost.komarek@mff.cuni.cz>
Initial release
2020-06-02

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.