2022-12-22 11:48:49 +01:00
|
|
|
setdiag <- function(M, v) {
|
2022-12-22 13:39:48 +01:00
|
|
|
# SETDIAG Set the diagonal of a matrix to a specified scalar/vector.
|
|
|
|
|
# M <- set_diag(M, v)
|
2022-12-22 11:48:49 +01:00
|
|
|
|
2022-12-22 13:39:48 +01:00
|
|
|
n <- length(M)
|
|
|
|
|
if (length(v) == 1) {
|
|
|
|
|
v <- repmat(v, c(1, n))
|
|
|
|
|
}
|
2022-12-22 11:48:49 +01:00
|
|
|
|
2022-12-22 13:39:48 +01:00
|
|
|
# e.g., for 3x3 matrix, elements are numbered
|
|
|
|
|
# 1 4 7
|
|
|
|
|
# 2 5 8
|
|
|
|
|
# 3 6 9
|
|
|
|
|
# so diagnoal = [1 5 9]
|
2022-12-22 11:48:49 +01:00
|
|
|
|
2022-12-22 13:39:48 +01:00
|
|
|
J <- seq(1, n ^ 2, n + 1)
|
|
|
|
|
M[J] <- v
|
|
|
|
|
return(M)
|
2022-12-22 11:48:49 +01:00
|
|
|
}
|