\[\mathbf{A} = \left[\begin{array} {} 1 & 2 & 3\\ -1 & 0 & 4\\ \end{array}\right] \]
# Problem Set 1
A <- matrix(c(1, -1, 2, 0, 3, 4), nrow = 2, ncol = 3)
A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] -1 0 4
# X = A * AT
X <- A %*% t(A)
X
## [,1] [,2]
## [1,] 14 11
## [2,] 11 17
# Y = AT * A
Y <- t(A) %*% A
Y
## [,1] [,2] [,3]
## [1,] 2 2 -1
## [2,] 2 4 6
## [3,] -1 6 25
# Compute eigenvalues and eigenvectors of X
X_eigen <- eigen(X)
X_values <- X_eigen$values
X_values
## [1] 26.601802 4.398198
X_vector <- X_eigen$vectors
X_vector
## [,1] [,2]
## [1,] 0.6576043 -0.7533635
## [2,] 0.7533635 0.6576043
# Compute eigenvalues and eigenvectors of Y
Y_eigen <- eigen(Y)
Y_values <- Y_eigen$values
Y_values
## [1] 2.660180e+01 4.398198e+00 1.058982e-16
Y_vector <- Y_eigen$vectors
Y_vector
## [,1] [,2] [,3]
## [1,] -0.01856629 -0.6727903 0.7396003
## [2,] 0.25499937 -0.7184510 -0.6471502
## [3,] 0.96676296 0.1765824 0.1849001
# Compute left-singular, singular values, and right-singular vectors of A using svd command
svd_A <- svd(A)
left_singular <- svd_A$u
left_singular
## [,1] [,2]
## [1,] -0.6576043 -0.7533635
## [2,] -0.7533635 0.6576043
singular_values <- svd_A$d
singular_values
## [1] 5.157693 2.097188
right_singular <- svd_A$v
right_singular
## [,1] [,2]
## [1,] 0.01856629 -0.6727903
## [2,] -0.25499937 -0.7184510
## [3,] -0.96676296 0.1765824
# Compare the eigenvector of X with left_singular
X_vector
## [,1] [,2]
## [1,] 0.6576043 -0.7533635
## [2,] 0.7533635 0.6576043
left_singular
## [,1] [,2]
## [1,] -0.6576043 -0.7533635
## [2,] -0.7533635 0.6576043
round(abs(X_vector)) == round(abs(left_singular))
## [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE TRUE
# Compare the eigenvector of Y with right_singular
Y_vector
## [,1] [,2] [,3]
## [1,] -0.01856629 -0.6727903 0.7396003
## [2,] 0.25499937 -0.7184510 -0.6471502
## [3,] 0.96676296 0.1765824 0.1849001
right_singular
## [,1] [,2]
## [1,] 0.01856629 -0.6727903
## [2,] -0.25499937 -0.7184510
## [3,] -0.96676296 0.1765824
#Problem Set 2
# The input matrix has to be square
myinverse <- function(B){
n <- nrow(B)
C <- matrix(nrow = n, ncol = n)
for (i in 1:n){
for (j in 1:n){
C[i, j] <- det(B[-i,-j])*(-1)^(i+j)
}
}
inverse_B <- t(C)/det(B)
return(inverse_B)
}