マトラブで指数関数的なマトリックスのフォームw * diag(s) * w 'のマトリックスの固有分解
-
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'
簡単なアルゴリズムを持っていることを約束しているように見えますが、ここでは線形代数のヘルプが必要です。
解決
最初にWのいわゆる「薄い」QR因数分解を実行し、次に固有値分解を計算します R*diag(S)*R'
, 、これを使用して、AのEIG分解を計算します。
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');
お役に立てれば。
A.
他のヒント
MATLABには、実際には、最大の(または最小)固有値とベクトルを取得するための実装があります。使用する eigs(A,k)
を取得します k
最大。
最大のみを取得するには、 パワーイテレーション 方法、またはそれ以上でありながらレイリー商の反復。
所属していません StackOverflow