robustX (version 1.2-7)

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))

Value

\(p \times p\) orthogonal matrix which rotates

\((1,0,...,0)\) onto a vector proportional to unit.image.

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)\).

Author

Martin Maechler

Details

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

See Also

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

Examples

Run this code
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