Если матрица является разреженной и симметричной положительно определенной, но имеет узкую полосу очень , то используется специализированный решатель полос. Большинство матриц не имеют достаточно узкой полосы, чтобы вызвать это условие. Как правило, это происходит с 1-D сплайнами в Spline Toolbox. 2-D задачи имеют большую «полосу» (они не являются по-настоящему скрещенными матрицами).
Более типично, MATLAB использует CHOLMOD для разреженных симметричных положительно определенных матриц. Если матрица разреженная, симметричная и неопределенная, то она использует MA49 от Iain Duff.
Вы можете заставить MATLAB рассказать вам, что он делает внутри A\b
с помощью этой опции:
spparms ('spumoni',3)
затем выключите его снова с помощью
spparms ('spumoni',0)
Для матриц с разреженными квадратами используется UMFPACK. Для разреженных прямоугольных матриц используется SuiteSparseQR (или сокращенно spqr).
Для разреженных матриц, которые имеют нижнюю или верхнюю треугольную форму или могут быть преобразованы в такие, используется решатель вперед / назад, который использует эти свойства.
MATLAB вообще не использует симплекс-метод в обратной косой черте. Если матрица прямоугольная (короткая и толстая, с большим количеством столбцов, чем строк), A\b
возвращает базовое решение. Если вы хотите минимальное 2-нормальное решение, вам нужно разложить A'
. Это можно сделать в интерфейсе spqr MATLAB, но эта опция недоступна в дистрибутиве MATLAB. Вам нужно будет установить spqr из исходного кода на suitesparse.com .