Нахождение ортогонального базиса симметричной матрицы в c ++ - PullRequest
3 голосов
/ 11 октября 2019

Я хочу найти собственное разложение симметричной матрицы, которое выглядит, например, так:

0 2 2 0
2 0 0 2
2 0 0 2
0 2 2 0

У него есть вырожденное собственное пространство, в котором вы, очевидно, имеете определенную свободу выбора собственных векторов. Есть ли библиотека для c ++, которую я могу заставить найти ортогональную основу такой, что H = UDU^{T}?

В настоящее время я использую Eigen :: SelfAdjointEigenSolver. Это дает «неправильный» результат, так как тогда я должен использовать H = UDU^{-1}. Матрицы будут иметь размеры 10000x10000 позже, поэтому я хочу опустить дополнительную инверсию матрицы.

Кто-нибудь знает о такой вещи?

1 Ответ

0 голосов
/ 11 октября 2019

OpenCV поддерживает это. Хотя я не знаю, сможете ли вы использовать его на матрице 10000x10000 в течение подходящего времени / точности. Я считаю, что в OpenCV лучше всего подходит метод eigen(...).

Существует также библиотека линейной алгебры BLAS C ++, но я не знаком с ней.

Кроме того, возможно, есть реализацияАлгоритм для этой задачи в книге «Численные рецепты».

...