Диагонализировать матрицу для вычисления мощности матрицы? - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь вычислить P^100, где P - моя матрица перехода. Я хочу сделать это по диагонали P, чтобы у нас было P = Q*D*Q^-1.

Конечно, если я могу получить P этой формы, то я легко могу вычислить P^100 = Q*D^100*Q^-1 (где * обозначает умножение матриц).

Я обнаружил, что если вы просто делаете P^5, что все, что вы получите взамен, - это матрица, в которой каждая из ваших записей P была поднята до 5-й степени, а не пятой степени матрицы (P*P*P*P*P).

Здесь я нашел вопрос, который спрашивает, как проверить, является ли матрица диагонализуемой, но не как явно построить диагонализацию матрицы. В MATLAB это очень просто, но я использую R, а не MATLAB.

1 Ответ

5 голосов
/ 03 февраля 2020

Функция eigen() будет вычислять для вас собственные значения и собственные векторы (в вашем выражении матрица собственных векторов равна Q, diag() из собственных значений равна D).

Вы также можете использовать оператор %^% в пакете expm или функции из других пакетов, описанных в ответах на этот вопрос .

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

...