# chex57.r Demonstration of Givens transformations # for simple linear regression problem # Example 5.7 # X <- matrix(c(rep(1,4),(1:4)),4,2) # design matrix X # # function to do Givens on col i, rows i,j Givens <- function(X,i,j) { a <- X[i,i] ; b <- X[j,i] r <- sqrt(a*a+b*b) # length Uij <- matrix( c(a/r,-b/r,b/r,a/r),2,2) # essential print(Uij) # matrix X[c(i,j),] <- Uij %*% X[c(i,j),] # main computation U <- diag(4) ; # identity U[c(i,j),c(i,j)] <- Uij # modify row/col i,j print(U) # big matrix Givens <- X } # return modified X # # go through a sequence of steps, putting zeros in X X <- Givens(X,1,2) X # U12*X X <- Givens(X,1,3) X # U13*U12*X X <- Givens(X,2,3) X # U23*U13*U12*X X <- Givens(X,1,4) X # U14*U23*U13*U12*X X <- Givens(X,2,4) X # U24*U14*U23*U13*U12*X # clean and close rm(list=ls()) q()