内联表达式以堆叠矩阵并提高幂次

时间:2019-06-07 08:40:30

标签: r matrix

我正在写这个问题,以寻求一种优雅的,内联的堆栈矩阵解决方案寻求帮助,并在堆栈中的每次迭代中施加能量。

我有两个矩阵 $ \ 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)

}

0 个答案:

没有答案