Я пишу этот вопрос, чтобы получить некоторую помощь с элегантным встроенным решением для стековых матриц и на каждой итерации в стеке применять силу.
У меня есть две матрицы $ $ Lambda \ in \ mathbb {R} ^ {m \ times m} $ и $ \ Theta \ in \ mathbb {R} ^ {m \ times m} $ . Я хочу создать следующую матрицу $ P \ in \ mathbb {R} ^ {m (n + 1) \ times m (n + 1)} $ , которая определена следующим образом:
$$ A = \ left (\ begin {matrix} \ Lambda & \ Lambda \ Theta & \ dots & \ Lambda \ Theta ^ n \\\ \ Lambda \ Theta & \ Lambda & \ dots & \ Lambda \ Theta ^ {n-1} \\ \ vdots & \ vdots & \ ddots & \ vdots \\\ \ Lambda \ Theta ^ {n} & \ Lambda \ Theta ^ {n-1} & \ dots & \ Lambda \ end {matrix} \ right) $$
Симметричная матрица такая, что $ A_ {ij} = \ Lambda \ Theta ^ {| i-j |} $ . Это просто сделать с помощью двойного цикла for, но я хотел бы посмотреть, смогу ли я сделать это с помощью встроенного выражения. Я знаю, как повторять встроенную матрицу, однако мне неясно, как я могу повторить и впоследствии подняться до степени.
Любые предложения очень ценятся! Приветствия.
P_matrix <- function (n, Lambda, Theta) {
P_row <- matrix(); P <- matrix()
for (i in 0:n) {
for (j in 0:n) {
col <- Lambda %*% diag(exp(-h * diag(Theta) * abs(j-i)))
if(j==0){
P_row <- col
} else {
P_row <- cbind(P_row, col)
}
}
if(i==0){
P <- P_row
} else {
P <- rbind(P, P_row)
}
}
return (P)
}