나는 복잡한 벡터 (Eigen 값을 포함하는 VSII_Complex
)와 복잡한 행렬 (고유 벡터를 포함하는 CUII_Complex
)을 가지고 있습니다. VSII_Complex
의 각 요소는 CUII_Complex
의 열에 해당합니다. 내 문제는 VSII_Complex
실제 부분 (허수가 아닌 부분)을 기반으로 Eigen 값을 정렬하고 정렬 된 VSII_Complex
에 따라 CUII_Complex
의 열을 정렬해야합니다. 다음 코드는 내 친구에 의해 개발되었지만이 코드에 문제가있는 것처럼 느껴졌지 만 알아낼 수는 없습니다. 나는 누군가가 무엇이 잘못되었다고 말할 수 있는지 궁금합니다.C++ : 복잡한 벡터의 실수 부분을 기반으로 복잡한 행렬을 정렬하는 방법
EIG eigA=EIG(m_IIStiffnessAct,m_IIMassAct,true);
ComplexColumnVector VSII_Complex=eigA.eigenvalues();
ComplexMatrix CUII_Complex=eigA.eigenvectors();
///// make eigenvalues in decreasing order, so do eigenvectors
for (long ii = 0; ii < VSII_Complex.rows(); ii++)
{
for (long jj = ii+1; jj < VSII_Complex.rows(); jj++)
{
if (VSII_Complex(ii).real() < VSII_Complex(jj).real())
{
Complex temp = VSII_Complex(ii);
VSII_Complex(ii) = VSII_Complex(jj);
VSII_Complex(jj) = temp;
for (long kk = 0; kk < CUII_Complex.rows(); kk++)
{
Complex tempVec = CUII_Complex(kk,ii);
CUII_Complex(kk,ii) = CUII_Complex(kk,jj);
CUII_Complex(kk,jj) = tempVec;
}
}
}
}
http://www.learncpp.com/cpp-tutorial/64-sorting-an-array-using-selection-sort/
나는 내 대답은 아래에서이 문제에 대한 해결책으로 C++ 코드를 추가했다. 하지만 당신의 해결책은 나에게 잘 어울립니다. – user3405291이 문제가 해결되어 올바르게 정렬되었습니다. – PeterT