MATLABで[V,D] = eig(a)
、対称行列に対してコマンドを実行すると、最大の固有値(およびそれに関連するベクトル)が最後の列に配置されます。ただし、非対称行列で実行すると、最大の固有値が最初の列にあります。
最大の固有値に関連付けられた固有ベクトルを計算する必要がある固有ベクトルの中心性を計算しようとしています。したがって、最大の固有値が2つの別々の場所に現れるという事実は、私が解決策を見つけるのを難しくします。
MATLABで[V,D] = eig(a)
、対称行列に対してコマンドを実行すると、最大の固有値(およびそれに関連するベクトル)が最後の列に配置されます。ただし、非対称行列で実行すると、最大の固有値が最初の列にあります。
最大の固有値に関連付けられた固有ベクトルを計算する必要がある固有ベクトルの中心性を計算しようとしています。したがって、最大の固有値が2つの別々の場所に現れるという事実は、私が解決策を見つけるのを難しくします。
私が通常行うことは次のとおりです。
[V D] = eig(a);
[D order] = sort(diag(D),'descend'); %# sort eigenvalues in descending order
V = V(:,order);
で最大の固有値のインデックスを見つける必要があります。これは、関数DIAGを使用して主対角線を抽出し、関数MAXを使用して最大の固有値とそれが発生するインデックスを取得するD
ことで簡単に実行できます。
[V,D] = eig(a);
[maxValue,index] = max(diag(D)); %# The maximum eigenvalue and its index
maxVector = V(:,index); %# The associated eigenvector in V
注: woodchipsが指摘しているように、非対称行列に対して複雑な固有値を持つことができます。複素数入力を操作する場合X
、MAX関数は複素数の大きさを使用しますmax(abs(X))
。等振幅要素の場合、位相角max(angle(X))
が使用されます。
非対称行列は複雑な固有値を持つ傾向があることに注意してください。
eig(rand(7))
ans =
3.2957
-0.22966 + 0.58374i
-0.22966 - 0.58374i
-0.38576
0.49064
0.17144 + 0.27968i
0.17144 - 0.27968i
また、eig はソートされた固有値を明示的に返さないことに注意してください (基本的なアルゴリズムは、固有値の大きさに基づいて、ほぼソートされた順序で固有値を生成する傾向があります)。ただし、ソートを行う場合でも、ソートの仕組みを理解する必要があります。複素数ベクトルについて。
sort(rand(5,1) + i*rand(5,1))
ans =
0.42343 + 0.51539i
0.0098208 + 0.76145i
0.20348 + 0.88695i
0.43595 + 0.83893i
0.8225 + 0.91264i
並べ替えを複素数入力に適用すると、複素数の大きさに作用します。
最大の固有値に関連付けられた固有ベクトルのみを気にする場合は、 を使用する方がよいのではないeigs
でしょうか?
[V, D] = eigs( a, 1, 'lm' ); %// get first eigenvector with largest eigenvalue magnitude.