2016-09-28 2 views
1

나는 고유 값을 가진 대각선 행렬을 가지고있다. 1, 2 및 3입니다. 약간의 노이즈로 값을 방해하지만 시퀀스를 변경할만큼 작습니다. 이 행렬의 고유 값을 구하면 50 %의 경우 1,2,3이고 다른 50 %의 경우는 1,3,2입니다. 내가 잡음없이 똑같은 일을 할 때 순서는 항상 1,2,3입니다.Eigen을 사용하여 고유 값의 원래 순서를 얻는 방법?

I 사용하여 고유 값을 구

matrix.eigenvalues().real(); 

또는 사용 :

Eigen::EigenSolver<Eigen::Matrix3d> es(matrix, false); 
es.eigenvalues().real(); 

결과는 동일하다. 어떤 아이디어로 그것을 고치는 법?

답변

2

비자가 결합 행렬의 고유 값에 대한 순서는 일반적으로 복잡하기 때문에 (실제 값 행렬의 경우에도 마찬가지 임). 하나는 사전 식으로 정렬 할 수 있고 (처음에는 실수로, 그 다음은 복잡한 것으로) 또는 크기로 정렬 할 수 있지만 Eigen은 어느 것도 수행하지 않습니다. 당신이보고 at the documentation이있는 경우 확인할 수있는 것들 :

고유 값은 대수 다양성에 따라 반복, 그래서 행렬의 행만큼 고유 있습니다. 고유 값은 특정 순서로 정렬되지 않습니다.

당신의 매트릭스 (그들은 진짜 따라서 정렬 모든 때문에, 일종의 고유 값을 수행하는) 자기 수반 행렬는 물론, SelfAdjointEigenSolver을 사용해야 될 일 경우. 그렇지 않으면 선호하는 기준에 따라 고유 값을 수동으로 정렬해야합니다.

N.B .: 정확하게 동일한 알고리즘이 적용되므로 matrix.eigenvalues()es.eigenvalues()의 결과는 실제로 동일해야합니다. 본질적으로 첫 번째 변이 형은 단지 당신이 고유치에만 관심이 있다면 단돈이다.