Библиотеки по линейной алгебре на С++

Текст написан в декабре 2007 года для группы http://groups.google.com/group/matrixprogramming_ru

Я хотел бы поделиться своими соображениями по поводу библиотек на С++ по линейной алгебре. Если поискать в Usenet, то можно увидеть, что регулярно на протяжении последних лет пятнадцати задается вопрос, а какую библиотеку по линейной алгебре на С++ следует использовать. Соответствено, было много разработок на эту тему. Однако и сейчас дать однозначный ответ на этот вопрос, по-моему, нельзя.

Я по ходу пробовал использовать несколько библиотек, но затем по ряду причинам, все завершилось тем, что я просто сам вызывал разных решателей из моего кода на С++. Я не хочу сказать, что это наилучшее решение, но вот так вышло.

Основная причина, наверное, была недостаток времени. Мне нужно было быстро решить мою задачу, в которой основная нагрузка была связана с решением системы линейных уравнений, а функциональность, связанная с матричными операциями требовалась достаточно ограниченная, и оказалось, что было проще реализовать ее самому.

Однако могу назвать и другие причины. Функциональность библиотек была ограничена, в особенности лет десять назад. Получалось так, что вот как раз того что требовалось, там и не было. Последняя попытка у меня было несколько лет назад, когда я хотел взять GMM++. Изучил документацию, начал тесты прогонять, и тут то и выяснилось, что в ней нет представления для симметричных матриц (когда хранится только половина матрицы). А для меня это было критично, поскольку я работал с разреженными матрицами большой размерности.

С другой стороны, для быстрой разработки (prototyping) появились среды типа Matlab, Matematica и другие, где уже как раз вся линейная алгебра была представлена. Я сам работал с Matematica и могу сказать, что проверить идею в ней гораздо быстрее, чем программировать на С++. Здесь также могу привлечь внимание к SciPy и NumPy

http://www.scipy.org/

Я сейчас переключился на их использование. NumPy, как мне кажется, дает очень неплохой интерфейс к LAPACK.

В этой связи появляется вопрос, а насколько сейчас нужна библиотека по линейной алгебре на С++. Использование интерпретатора типа Python, который дает интерфейс к откомпилированным и оптимизированным решателям мне представляется вполне перспективным. На этом пути можно сочетать средства быстрой разработки с неплохой производительностью. Собственно говоря, и Matlab, и Matematica делают тоже самое.

Было бы также интересно написать историю библиотек по линейной алгебре на С++, как развивались идеи. Это, наверное, дало бы много пищи для размышлений.


Comments are closed.