Я не могу предложить вам никаких подробностей, поскольку сам не использовал его, но я думаю, что ARPACK может помочь, и особенно ARPACK ++, который является адаптацией C ++, поскольку исходный пакет находится в Fortran77. Я думаю, что функция MATLAB eigs () использует это, чтобы найти наибольшее собственное значение (и соответствующий собственный вектор). Насколько я знаю, я должен иметь возможность взаимодействовать и с STL.
MATLAB использует подпрограммы Fortran77 DSAUPD, DSEUPD, DNAUPD, DNEUPD, ZNAUPD и ZNEUPD. Похоже, их стоит искать в ARPACK ++.
По крайней мере, если мне не изменяет память, одной из возможностей может быть Boost::uBlas
. Хотя Boost в целом довольно велик, uBlas
сам по себе гораздо более разумен. Кроме того, если мне не изменяет память, это библиотека только для заголовков, поэтому использовать ее довольно просто (вам не нужно сначала собирать библиотеку, настраивать компоновщик и т.д.)
Edit: Я должен добавить, что вычисление собственных значений/векторов в целом довольно медленное, даже с довольно оптимизированным кодом. В зависимости от того, что именно вы делаете, часто стоит обратить внимание на методы, которые (для примера) позволяют обойтись вычислением собственного значения только подмножества матрицы (например, Landmark Multidimensional Scaling).