Собственное разложение матрицы формы w * diag (s) * w 'для экспоненциальной матрицы в Matlab

StackOverflow https://stackoverflow.com/questions/4178523

Вопрос

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top