我正在写这个问题,以寻求一种优雅的,内联的堆栈矩阵解决方案寻求帮助,并在堆栈中的每次迭代中施加能量。
我有两个矩阵 $ \ 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 |} $ 。用double 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)
}