Встроенное выражение, чтобы составить матрицу и поднять на державу - PullRequest
0 голосов
/ 07 июня 2019

Я пишу этот вопрос, чтобы получить некоторую помощь с элегантным встроенным решением для стековых матриц и на каждой итерации в стеке применять силу.

У меня есть две матрицы $ $ 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)

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...