Ответ 1
Лучший способ решить систему линейных уравнений формы Ax = b
состоит в том, чтобы сделать следующее.
- разложите
A
в форматA = M1 * M2
(гдеM1
иM2
треугольные) - Решите
M1 * y = b
дляy
с помощью обратной подстановки - Решите
M2 * x = y
дляx
с помощью обратной подстановки
Для квадратных матриц, шаг 1 будет использовать LU Decomposition.
Для неквадратных матриц, шаг 1 будет использовать QR Decomposition.
Если матрица A положительно определена и не разрежена, вы должны использовать разложить его, а затем треугольный решить его.
Если это все еще медленно, к счастью, существует множество библиотек линейной алгебры, которые позволяют вам это делать. Процедура, которую вы должны искать, - dpotrs
. Некоторые библиотеки, которые реализованы, следующие:
- Netlib lapack: Документация и Загрузить (бесплатно)
- Intel MKL: Documentation и Загрузить ( Бесплатно для некоммерческого использования).
- AMD ACML: Download (бесплатно)
- PLASMA: Загрузить (бесплатно, с несколькими ядрами)
- MAGMA: Загрузить (бесплатно, реализовано в CUDA, OpenCL)
- CULA: Download (freemium, реализован в CUDA).
Если вы используете eigen в общем проекте, вы можете связать необходимую процедуру LAPACK, как описано здесь.