Собственное разложение матрицы формы w * diag (s) * w 'для экспоненциальной матрицы в Matlab
-
10-10-2019 - |
Вопрос
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'
Выглядит обещательно иметь легкий алгоритм, мне нужна помощь в линейной алгебре.
Решение
Сначала я бы выполнил так называемую «тонкую» QR -факторизацию W, а затем вычислил разложение собственных значений R*diag(S)*R'
, затем используйте это, чтобы вычислить разложение EIG A.
N = 10;
n=3;
S = 2*(rand(1,n)>0.5)-1;
W = rand(N,n);
[Q,R] = qr(W,0);
[V,D] = eig(R*diag(S)*R');
%this is the non rank-deficient part of eig(W*diag(S)*W')
D_A = D;
V_A = Q*V;
%compare with
[V_full,D_full] = eig(W*diag(S)*W');
Надеюсь это поможет.
А.
Другие советы
Matlab фактически обладает реализацией для получения самых больших (или наименьших) значений собственности и векторов. Использовать eigs(A,k)
чтобы получить k
крупнейший.
Чтобы получить только самый большой, можно использовать Властная итерация Метод, или, что еще лучше, итерация Rayleigh.