Собственное разложение матрицы вида W * diag (S) * W 'для экспоненциальной матрицы в MATLAB - PullRequest
2 голосов
/ 14 ноября 2010

W - это высокая и тощая реальная матрица, а diag(S) - диагональная матрица, состоящая из +1 или -1 на диагонали. Я хочу собственное разложение A = W * diag(S) * W', где одинарная кавычка обозначает транспонирование. Основная проблема в том, что A довольно большой. Поскольку A является симметричным, с недостатком ранга, и я действительно знаю максимальный ранг A (из W), я думаю, что я должен быть в состоянии сделать это эффективно. Есть идеи, как к этому подойти?

Моя конечная цель - вычислить матричную экспоненту A без использования MATLAB expm, который довольно медленный для больших матриц и не использует недостаток ранга. Если A = U * diag(Z) * U' является собственным разложением, exp(A) = U * diag(exp(Z)) * U'.

При нахождении ортогонального U такого, что W * diag(S) * W' = U' * diag(Z) * U' выглядит многообещающим, чтобы иметь простой алгоритм, мне нужна помощь по линейной алгебре.

Ответы [ 2 ]

3 голосов
/ 15 ноября 2010

Сначала я выполнил бы так называемую «тонкую» QR-факторизацию W, затем вычислил разложение по собственным значениям R*diag(S)*R', а затем использовал это для вычисления разложения EIG по A.это помогает.

A.

2 голосов
/ 14 ноября 2010

MATLAB фактически имеет реализацию для извлечения самых больших (или самых маленьких) собственных значений и векторов.Используйте eigs(A,k), чтобы получить k наибольшее.

Чтобы получить только самое большое, можно использовать метод Power итерация или, что еще лучше, коэффициент Рэлея.

...