robustX (version 1.2-4)

Qrot: Rotation Matrix to Specific Direction

Description

Construct the \(p \times p\) rotation matrix that rotates the unit vector (1,0,....0), i.e., the \(x_1\)-axis, onto (1,1,1,...1)/\(\sqrt{p}\), or more generally to \(u/{\left\|u\right\|}\) (\(u :=\)unit.image).

Usage

Qrot(p, transpose = FALSE, unit.image = rep(1, p))

Arguments

p

integer; the dimension (of the vectors involved).

transpose

logical indicating if the transposed matrix is to returned.

unit.image

numeric vector of length \(p\) onto which the unit vector should be rotated; defaults to “the diagonal” \(\propto\)\((1,1,1,...,1)\).

Value

\(p \times p\) orthogonal matrix which rotates \((1,0,...,0)\) onto a vector proportional to unit.image.

Details

The qr decomposition is used for a Gram-Schmitt basis orthogonalization.

See Also

qr, matrix (and vector) multiplication, %*%.

Examples

Run this code
# NOT RUN {
Q <- Qrot(6)
zapsmall(crossprod(Q)) # 6 x 6 unity <==> Q'Q = I  <==> Q orthogonal

if(require("MASS")) {
  Qt <- Qrot(6, transpose = TRUE)
  stopifnot(all.equal(Qt, t(Q)))
  fractions(Qt ^2) # --> 1/6  1/30  etc, in an almost lower-triagonal matrix
}
# }

Run the code above in your browser using DataLab