Simple iteration is probably the most straightforward:
make_matrix <- function(size) {
m <- diag(size)
for(i in seq(nrow(m))) {
for(j in seq(ncol(m))) {
if(i == j) m[i,j] <- if(i == 1 || i == size) 1 else 2
else if (j == (i + 1) || j == (i - 1)) m[i,j] <- -1
}
}
m
}
make_matrix(4)
#> [,1] [,2] [,3] [,4]
#> [1,] 1 -1 0 0
#> [2,] -1 2 -1 0
#> [3,] 0 -1 2 -1
#> [4,] 0 0 -1 1
make_matrix(10)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] 1 -1 0 0 0 0 0 0 0 0
#> [2,] -1 2 -1 0 0 0 0 0 0 0
#> [3,] 0 -1 2 -1 0 0 0 0 0 0
#> [4,] 0 0 -1 2 -1 0 0 0 0 0
#> [5,] 0 0 0 -1 2 -1 0 0 0 0
#> [6,] 0 0 0 0 -1 2 -1 0 0 0
#> [7,] 0 0 0 0 0 -1 2 -1 0 0
#> [8,] 0 0 0 0 0 0 -1 2 -1 0
#> [9,] 0 0 0 0 0 0 0 -1 2 -1
#> [10,] 0 0 0 0 0 0 0 0 -1 1
Created on 2022-06-18 by the reprex package (v2.0.1)