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 |