Учитывая квадратную матрицу A
Мне нужно получить диагональную матрицу D
который содержит A
5 самых больших значений собственных значений и матрица V
столбцы которого являются соответствующими собственными векторами. В Matlab код [V,D] = eigs(A,5)
, Есть ли подобная функция в ArrayFire C ++?
В ArrayFire я использую af::eigen(Values,Vectors,A)
, Каков порядок элементов в Values
? В одном тесте у меня были элементы Values
отсортировано в порядке возрастания величины, однако в другом случае Values
был отсортирован в порядке убывания величины. По сути, мне нужно извлечь 5 собственных векторов, которые соответствуют собственным значениям наибольшей величины. Должен ли я использовать sort
Функция для достижения этого?
ОБНОВИТЬ
Вот простой пример:
// first example
float a[]={1, 2, 5, -2, 1, -5, 3, -2, 1};
array b(3,3,a);
array evalues, evectors;
af::eigen(evalues, evectors, b);
print(evalues); //`evalues` are not in order
// second example
float a2[]={1, -3, 3, 3, -5, 3, 6, -6, 4};
array b2(3,3,a2);
array evalues2, evectors2;
af::eigen(evalues2, evectors2, b2);
print(evalues2); //`evalues2` are in the decreasing order
Задача ещё не решена.
Других решений пока нет …