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