Для задач, которые меня интересуют, размер матрицы равен 30 или меньше.
Как отмечает WolfgangBangerth, если у вас нет большого количества этих матриц (миллионов, миллиардов), производительность инверсии матриц обычно не является проблемой.
Учитывая положительно определенную симметричную матрицу, каков самый быстрый алгоритм вычисления обратной матрицы и ее определителя?
Если скорость является проблемой, вы должны ответить на следующие вопросы:
- Тебе действительно нужно все обратное? (Многие приложения не должны формировать явное обратное.)
- Вам действительно нужен определитель? (Детерминанты встречаются редко, но, безусловно, не случайно в вычислительной науке.)
- Вам нужна либо высокая точность? (Алгоритмы низкой точности, как правило, быстрее.)
- Достаточно ли вероятностного приближения? (Вероятностные алгоритмы имеют тенденцию быть быстрее.)
Стандартным ответом на вашу проблему обращения небольшой положительно определенной матрицы и вычисления ее детерминанта будет разложение Холецкого. ЕслиA=LLT, тогда det(A)=∏ni=1l2iiи .det(A−1)=∏ni=1l−2ii
Предполагая, что равно на , разложение Холецкого можно вычислить примерно за флопов, что составляет примерно половину стоимости разложения LU. Однако такой алгоритм не будет считаться «быстрым». Рандомизированы разложение LUAnnn3/3может оказаться более быстрым алгоритмом, который стоит рассмотреть, если (1) вам действительно нужно вычислить большое количество матриц, (2) факторизация действительно является ограничивающим шагом в вашем приложении, и (3) любая ошибка, возникающая при использовании рандомизированного алгоритма, приемлемо. Ваши матрицы, вероятно, слишком малы, чтобы разреженные алгоритмы были полезны, поэтому единственные другие возможности для более быстрых алгоритмов потребовали бы дополнительной структуры матрицы (например, с полосами) или использования структуры проблемы (например, возможно, вы можете разумно реструктурировать свой алгоритм так, чтобы вы не больше нужно вычислять матрицу, обратную или ее определитель). Эффективные алгоритмы определителя - это примерно стоимость решения линейной системы с точностью до постоянного множителя, поэтому те же аргументы, что и для линейных систем, применимы и к вычислению определителей.