> # mxRex09.r > # > # my solutions to 'Some Matrix Exercises in R' > # > # (1) Create X > n <- 7 # arbitrary size > # > X <- matrix(c(rep(1,n),(1:n),(1:n)*(1:n)),n,3) > X [,1] [,2] [,3] [1,] 1 1 1 [2,] 1 2 4 [3,] 1 3 9 [4,] 1 4 16 [5,] 1 5 25 [6,] 1 6 36 [7,] 1 7 49 > # changing to arbitrary degree is harder > diff(diff(X)) [,1] [,2] [,3] [1,] 0 0 2 [2,] 0 0 2 [3,] 0 0 2 [4,] 0 0 2 [5,] 0 0 2 > # > # (2) Create A > A <- matrix(c(1,-2,1,rep(0,n-2)),n-2,n,byrow=TRUE) > A [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 -2 1 0 0 0 0 [2,] 0 1 -2 1 0 0 0 [3,] 0 0 1 -2 1 0 0 [4,] 0 0 0 1 -2 1 0 [5,] 0 0 0 0 1 -2 1 > # Multiply AX > A %*% X [,1] [,2] [,3] [1,] 0 0 2 [2,] 0 0 2 [3,] 0 0 2 [4,] 0 0 2 [5,] 0 0 2 > # > # > # (3) Toeplitz matrix > # first way > Z <- matrix(0,n,n) # create zero matrix > E <- abs( row(Z) - col(Z) ) > V <- log(1+E) > V [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 [2,] 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 [3,] 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 [4,] 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 [5,] 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 [6,] 1.7917595 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 [7,] 1.9459101 1.7917595 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 > # second way > E <- abs( matrix(1:n,n,n) - matrix(1:n,n,n,byrow=T) ) > V <- log(1+E) > V [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 1.9459101 [2,] 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 1.7917595 [3,] 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 1.6094379 [4,] 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 1.3862944 [5,] 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 1.0986123 [6,] 1.7917595 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 0.6931472 [7,] 1.9459101 1.7917595 1.6094379 1.3862944 1.0986123 0.6931472 0.0000000 > # > # (4) V(i,j) = max(i,j) > # similar to previous approach > R <- matrix(1:n,n,n) > C <- matrix(1:n,n,n,byrow=T) > V <- ( (R+C) + abs(R-C) )/2 > V [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 2 3 4 5 6 7 [2,] 2 2 3 4 5 6 7 [3,] 3 3 3 4 5 6 7 [4,] 4 4 4 4 5 6 7 [5,] 5 5 5 5 5 6 7 [6,] 6 6 6 6 6 6 7 [7,] 7 7 7 7 7 7 7 > # try another way > V <- pmax(R,C) > V [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 1 2 3 4 5 6 7 [2,] 2 2 3 4 5 6 7 [3,] 3 3 3 4 5 6 7 [4,] 4 4 4 4 5 6 7 [5,] 5 5 5 5 5 6 7 [6,] 6 6 6 6 6 6 7 [7,] 7 7 7 7 7 7 7 > # (5) J(i,j) = 1 only where i+j=n+1 > J <- diag(rep(1,n))[rev(1:n),] > J [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0 0 0 0 0 0 1 [2,] 0 0 0 0 0 1 0 [3,] 0 0 0 0 1 0 0 [4,] 0 0 0 1 0 0 0 [5,] 0 0 1 0 0 0 0 [6,] 0 1 0 0 0 0 0 [7,] 1 0 0 0 0 0 0 > J <- diag(1,n)[rev(1:n),] > J [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0 0 0 0 0 0 1 [2,] 0 0 0 0 0 1 0 [3,] 0 0 0 0 1 0 0 [4,] 0 0 0 1 0 0 0 [5,] 0 0 1 0 0 0 0 [6,] 0 1 0 0 0 0 0 [7,] 1 0 0 0 0 0 0 > # > # (6) K = 2x? matrix of all combinations > K <- matrix(c(rep((1:3),4),rep((1:4),each=3)),nrow=2,byrow=TRUE) > K [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [1,] 1 2 3 1 2 3 1 2 3 1 2 3 [2,] 1 1 1 2 2 2 3 3 3 4 4 4 > # > # done -- clean up > rm(list=ls()) > q()