Eigen Values of Householder Reflector
Eigen Values of a Household reflector
> library(Matrix) > set.seed(12345) > A <- matrix(runif(16), nrow = 4, ncol = 4) > Y <- A > m <- dim(A)[1] > n <- dim(A)[2] > k <- 1 > norm2 <- function(x) { + sqrt(sum(x^2)) + } > Q <- matrix(data = 0, nrow = 16, ncol = 4) > Q[seq(1, 16, 4), 1] <- 1 > Q[seq(2, 16, 4), 2] <- 1 > Q[seq(3, 16, 4), 3] <- 1 > Q[seq(4, 16, 4), 4] <- 1 > for (k in 1:n) { + Qt <- diag(4) + x <- A[k:m, k] + e1 <- c(1, rep(0, (length(x) - 1))) + Vk <- sign(x[1]) * norm2(x) * e1 + x + Vk <- Vk/norm2(Vk) + A[k:m, k:n] <- A[k:m, k:n] - 2 * Vk %*% t(Vk) %*% A[k:m, + k:n] + Qt[k:m, k:n] <- diag(length(x)) - 2 * Vk %*% t(Vk) + Q[(4 * k - 3):(4 * k), ] <- Qt + } |
Eigen values have to be +1 or 1 as it is a symmetric orthogonal matrix,
basically an isometric operator
> eigen(Q[5:8, ])$values [1] 1 1 1 -1 |
Determinant is 1 as it is norm preserving.
> abs(prod(eigen(Q[5:8, ])$values)) [1] 1 > abs(det(Q[5:8, ])) [1] 1 |
Singular values of the householder matrix is 1
> svd(Q[5:8, ])$d [1] 1 1 1 1 |