2

Wは縦長で細い実数値行列で、対角または対角上diag(S)で構成される対角行列です。一重引用符が転置を表す場所の固有分解が必要です。主な問題は、それがかなり大きいことです。は対称で、ランク不足であり、 (から)の最大ランクを実際に知っているので、これを効率的に行うことができるはずです。これにアプローチする方法はありますか?+1-1A = W * diag(S) * W'AAAW

A私の最終的な目標は、 MATLAB を使用せずに の行列指数を計算することですexpm。これは、大きな行列ではかなり遅く、ランク不足を利用しません。A = U * diag(Z) * U'が固有分解の場合、 exp(A) = U * diag(exp(Z)) * U'.

簡単なアルゴリズムを持つことが期待できるUような直交を見つけている間、ここで線形代数の助けが必要です。W * diag(S) * W' = U' * diag(Z) * U'

4

2 に答える 2

4

最初に 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.

于 2010-11-14T22:12:57.087 に答える
2

MATLAB には、最大 (または最小) の固有値とベクトルを取得するための実装が実際にあります。最大値eigs(A,k)を取得するために使用します。k

最大のものだけを取得するには、ベキ反復法を使用するか、レイリー商反復法を使用することをお勧めします。

于 2010-11-14T19:20:03.900 に答える