A <- matrix(c(1,-1,2,0,3,4), 2)
A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] -1 0 4
X <- A%*%t(A)
paste("X:")
## [1] "X:"
X
## [,1] [,2]
## [1,] 14 11
## [2,] 11 17
Y <- t(A)%*%A
paste("Y:")
## [1] "Y:"
Y
## [,1] [,2] [,3]
## [1,] 2 2 -1
## [2,] 2 4 6
## [3,] -1 6 25
eigenX <-eigen(X)
paste("eigen value for X E1 = ",eigenX$values[1], "E2 = ",eigenX$values[2])
## [1] "eigen value for X E1 = 26.6018016555873 E2 = 4.39819834441274"
paste("eigen vector for X")
## [1] "eigen vector for X"
eigenX$vectors
## [,1] [,2]
## [1,] 0.6576043 -0.7533635
## [2,] 0.7533635 0.6576043
eigenY <-eigen(Y)
paste("eigen value for Y E1 = ",eigenY$values[1], "E2 = ",eigenY$values[2])
## [1] "eigen value for Y E1 = 26.6018016555872 E2 = 4.39819834441274"
paste("eigen vector for Y")
## [1] "eigen vector for Y"
eigenY$vectors
## [,1] [,2] [,3]
## [1,] -0.01856629 -0.6727903 0.7396003
## [2,] 0.25499937 -0.7184510 -0.6471502
## [3,] 0.96676296 0.1765824 0.1849001
the two non zero eigen value of X and Y are the same
svdA<-svd(A, dim(A)[1], dim(A)[2])
paste("left sigular:")
## [1] "left sigular:"
svdA$u
## [,1] [,2]
## [1,] -0.6576043 -0.7533635
## [2,] -0.7533635 0.6576043
paste("eigen vector for X")
## [1] "eigen vector for X"
eigenX$vectors
## [,1] [,2]
## [1,] 0.6576043 -0.7533635
## [2,] 0.7533635 0.6576043
paste("left sigular value are same as eigen vector X ")
## [1] "left sigular value are same as eigen vector X "
paste("right sigular:")
## [1] "right sigular:"
svdA$v
## [,1] [,2] [,3]
## [1,] 0.01856629 -0.6727903 -0.7396003
## [2,] -0.25499937 -0.7184510 0.6471502
## [3,] -0.96676296 0.1765824 -0.1849001
paste("eigen vector for Y")
## [1] "eigen vector for Y"
eigenY$vectors
## [,1] [,2] [,3]
## [1,] -0.01856629 -0.6727903 0.7396003
## [2,] 0.25499937 -0.7184510 -0.6471502
## [3,] 0.96676296 0.1765824 0.1849001
paste("right sigular value are same as eigen vector Y ")
## [1] "right sigular value are same as eigen vector Y "
paste("sigular:")
## [1] "sigular:"
svdA$d
## [1] 5.157693 2.097188
paste("square of sigular value of A")
## [1] "square of sigular value of A"
svdA$d*svdA$d
## [1] 26.601802 4.398198
paste("eigen value of Y")
## [1] "eigen value of Y"
eigenY$values
## [1] 2.660180e+01 4.398198e+00 1.058982e-16
eigen value of X and Y are same as square of sigular value of A
myinverse <- function(A){
m <- matrix(rep(0,length(A)), nrow = nrow(A), ncol = ncol(A))
for(i in 1:ncol(A)){
for (j in 1:nrow(A)){
m[j,i] = det(A[-j,-i])
if ((j+i) %% 2 != 0){
m[j,i] = -1 * m[j,i]
}
}
}
return(t(m)/det(A))
}
A <- matrix(c(1,3,4,1, 1,2,1,3, 2,3,4,5, -1,5,-3,3), nrow=4, byrow=FALSE)
A
## [,1] [,2] [,3] [,4]
## [1,] 1 1 2 -1
## [2,] 3 2 3 5
## [3,] 4 1 4 -3
## [4,] 1 3 5 3
myinverse(A)
## [,1] [,2] [,3] [,4]
## [1,] 0.5483871 0.32258065 -0.03225806 -0.3870968
## [2,] 3.7419355 0.61290323 -1.16129032 -0.9354839
## [3,] -1.9677419 -0.45161290 0.64516129 0.7419355
## [4,] -0.6451613 0.03225806 0.09677419 0.1612903
round(A%*%myinverse(A),0)
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 0
## [2,] 0 1 0 0
## [3,] 0 0 1 0
## [4,] 0 0 0 1