Алгоритм умножения матриц квадратичной формы с разреженной матрицей

Я оптимизирую код, который в значительной степени зависит от специальной библиотеки Matrix (которая не будет исключена из проекта, потому что она есть повсюду. Это неприятно, но это факт ...) Многие вычисления выполняются с матрицами из 10-20 строк и столбцов, многие вычисления включают квадратичную форму, например

 C = A*B*A'

. Я понял, что часто A является разреженным, и я хотел бы использовать этот факт. Итак, я ищу алгоритм, который справился бы с этим случаем. Числовая стабильность важна. Есть что-нибудь, что я могу использовать? (Я не писал нашу библиотеку, поэтому не знаю, есть ли какие-то подводные камни, которые я должен учитывать?)

Поскольку «наш» простой метод умножения O (n ^ 3) выполняется быстрее, чем Eigen 3 на цели платформы, поскольку мне нужна числовая стабильность, а матрицы не очень большие, я полагаю, что алгоритм Штрассена, а также алгоритм Копперсмита – Винограда - не то, что я ищу. Вместо этого это просто умножение на квадратичную форму, позволяющее мне легко проверять нули в A.

Спасибо за любые предложения!

7
задан Philipp 15 December 2011 в 08:31
поделиться