Я собираюсь игнорировать часть вопроса Вандермонда (комментарий bubble указывает на то, что у него есть аналитическая обратная сторона) и ответить на более общий вопрос о других матрицах.
Я думаю, что некоторые вещи могут быть здесь перепутаны, поэтому я выделю следующее:
- Точное решение
V x = b
с использованием LU
- Точное решение
V x = b
с использованием QR
- Решение наименьших квадратов
V x = b
с использованием QR
- Решение наименьших квадратов
V x = b
с использованием SVD
- Точное решение
V^T V x = V^T b
с использованием LU
- Точное решение
V^T V x = V^T b
с использованием Cholesky
Первый ответ maths.stackexchange, на который вы ссылались, относится к случаям 1 и 2. Когда он говорит, что LU медленный, это означает относительно методов для конкретных типов матриц, например, положительно определенный, треугольный, полосатый, ...
Но я думаю, что вы на самом деле спрашиваете о 3-6. Последняя ссылка на стек-поток утверждает, что 6 быстрее, чем 4. Как вы сказали, 4 должно быть медленнее, чем 3, но 4 - единственная, которая работает для ранг-дефицитных V
. 6 должно быть быстрее, чем 5 в целом.
Мы должны убедиться, что вы сделали 6, а не 5. Чтобы использовать 6, вам нужно будет использовать scipy.linalg.solve
с assume_a="pos"
. В противном случае вы бы сделали 5.
Я не нашел ни одной функции, которая выполняет 3 в numpy
или scipy
. Подпрограмма Lapack - это xGELS, которая, похоже, не раскрывается в scipy
. Вы должны быть в состоянии сделать это с помощью scupy.linalg.qr_multiply
, за которым следует scipy.linalg.solve_triangular
.