Power Method for Find the maximum eigenvalue

We have a square Matrix A which has the maximum eigenvalue, 7.

A <- matrix(c(1, -3, 2, 4, 4, -1, 6, 3, 5), ncol = 3, byrow = T)

Define arbitrary vector,u1

u1 <- c(1, 1, 1)

Multiply u1 for A, we got v2

v2 <- A %*% u1
v2
##      [,1]
## [1,]    0
## [2,]    7
## [3,]   14

u2 is made by v2 deviding maximum element of v2

u2 <- v2/max(v2)

the eigenvalue and eigenvector of 1st iterations

max(v2)
## [1] 14
u2
##      [,1]
## [1,]  0.0
## [2,]  0.5
## [3,]  1.0

iteration #2

v3 <- A %*% u2
v3
##      [,1]
## [1,]  0.5
## [2,]  1.0
## [3,]  6.5
u3 <- v3/max(v3)
max(v3)
## [1] 6.5
u3
##         [,1]
## [1,] 0.07692
## [2,] 0.15385
## [3,] 1.00000

iteration #3

v4 <- A %*% u3
v4
##          [,1]
## [1,]  1.61538
## [2,] -0.07692
## [3,]  5.92308
u4 <- v4/max(v4)
max(v4)
## [1] 5.923
u4
##          [,1]
## [1,]  0.27273
## [2,] -0.01299
## [3,]  1.00000

iteration #4

v5 <- A %*% u4
v5
##         [,1]
## [1,] 2.31169
## [2,] 0.03896
## [3,] 6.59740
u5 <- v5/max(v5)
max(v5)
## [1] 6.597
u5
##          [,1]
## [1,] 0.350394
## [2,] 0.005906
## [3,] 1.000000

iteration #5

v6 <- A %*% u5
v6
##        [,1]
## [1,] 2.3327
## [2,] 0.4252
## [3,] 7.1201
u6 <- v6/max(v6)
max(v6)
## [1] 7.12
u6
##         [,1]
## [1,] 0.32762
## [2,] 0.05972
## [3,] 1.00000

iteration #6

v7 <- A %*% u6
v7
##        [,1]
## [1,] 2.1485
## [2,] 0.5494
## [3,] 7.1449
u7 <- v7/max(v7)
max(v7)
## [1] 7.145
u7
##         [,1]
## [1,] 0.30070
## [2,] 0.07689
## [3,] 1.00000

iteration #7

v8 <- A %*% u7
v8
##        [,1]
## [1,] 2.0700
## [2,] 0.5104
## [3,] 7.0349
u8 <- v8/max(v8)
max(v8)
## [1] 7.035
u8
##         [,1]
## [1,] 0.29425
## [2,] 0.07255
## [3,] 1.00000

iteration #8

v9 <- A %*% u8
v9
##        [,1]
## [1,] 2.0766
## [2,] 0.4672
## [3,] 6.9832
u9 <- v9/max(v9)
max(v9)
## [1] 6.983
u9
##        [,1]
## [1,] 0.2974
## [2,] 0.0669
## [3,] 1.0000

By using routine, calcurate 50 times.

u <- c()
v <- c()
u[[1]] <- c(1, 1, 1)
for (i in 1:50) {
    v[[i]] <- A %*% u[[i]]
    u[[i + 1]] <- v[[i]]/max(v[[i]])
    print(max(v[[i]]))
}
## [1] 14
## [1] 6.5
## [1] 5.923
## [1] 6.597
## [1] 7.12
## [1] 7.145
## [1] 7.035
## [1] 6.983
## [1] 6.985
## [1] 6.997
## [1] 7.002
## [1] 7.002
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7
## [1] 7

chaning eigenvector matrix

change <- matrix(unlist(v), nrow = 3)
plot(apply(change, 2, max), type = "b")

plot of chunk unnamed-chunk-14

printing the differences between n-th and n+1-th eigenvalue

options(scipen = 15)
diff(apply(change, 2, max))
##  [1] -7.5000000000000000000 -0.5769230769230766498  0.6743256743256740293
##  [4]  0.5226761427548831662  0.0247927002627568172 -0.1100070670889685687
##  [7] -0.0517013718241345899  0.0017970592386555850  0.0123773779381100013
## [10]  0.0049058996322308701 -0.0006844619086301407 -0.0013942683944225820
## [13] -0.0004439290842395138  0.0001226538388472420  0.0001522312659378855
## [16]  0.0000377058411853426 -0.0000180155997169251 -0.0000161854385032356
## [19] -0.0000028923287711535  0.0000023938886073438  0.0000016752518270380
## [22]  0.0000001805610363448 -0.0000002986936973315 -0.0000001685456814116
## [25] -0.0000000051801825052  0.0000000356167069171  0.0000000164272009329
## [28] -0.0000000009553575708 -0.0000000040971794846 -0.0000000015414647336
## [31]  0.0000000002591464821  0.0000000004571063528  0.0000000001377262748
## [34] -0.0000000000435891323 -0.0000000000496003238 -0.0000000000114708243
## [37]  0.0000000000062181371  0.0000000000052402527  0.0000000000008499867
## [40] -0.0000000000008126833 -0.0000000000005382361 -0.0000000000000488498
## [43]  0.0000000000001003642  0.0000000000000532907  0.0000000000000008882
## [46] -0.0000000000000115463 -0.0000000000000053291  0.0000000000000000000
## [49]  0.0000000000000017764