Я оптимизирую код, который в значительной степени опирается на пользовательскую библиотеку Matrix (которая не будет исключена из проекта, потому что она есть везде. Это нехорошо, но это факт ...) Многие вычисления выполняются с помощью матриц из 10-20 строк и столбцов многие вычисления включают в себя квадратичную форму, например
C = A*B*A'
Я понял, что часто А редок, и я хотел бы использовать этот факт. Поэтому я ищу алгоритм, который бы справился с этим делом. Численная стабильность важна. Я могу что-нибудь использовать?
(Я не писал нашу библиотеку, поэтому я не знаю, есть ли какие-то подводные камни, которые я должен принять во внимание?)
Поскольку «наш» простой метод умножения O (n ^ 3) выполняется быстрее, чем Eigen 3 на целевой платформе, поскольку мне нужна числовая стабильность, а матрицы не очень большие, я полагаю, что алгоритм Штрассена так же, как и Coppersmith– Виноградный алгоритм - это не то, что я ищу. Вместо этого это просто умножение квадратичных форм таким способом, который позволяет мне легко проверять нули в A.
Спасибо за любые предложения!