как matlab решает большие, симметричные и разреженные линейные системы - PullRequest
2 голосов
/ 10 ноября 2011

То есть, когда я делаю A\b для очень большого, симметричного и разреженного A, какой алгоритм использует Matlab?

Ответы [ 2 ]

4 голосов
/ 19 мая 2012

Если матрица является разреженной и симметричной положительно определенной, но имеет узкую полосу очень , то используется специализированный решатель полос. Большинство матриц не имеют достаточно узкой полосы, чтобы вызвать это условие. Как правило, это происходит с 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 .

2 голосов
/ 10 ноября 2011

Ответ зависит от некоторых свойств A (диагональ / квадрат / полоса? И т. Д.). CHOLMOD, UMFPACK и факторизация qr - некоторые из вариантов.

Документация объясняет это. Вот ссылки на онлайн снимки документов. Это может быть устаревшим. - http://amath.colorado.edu/computing/Matlab/OldTechDocs/ref/arithmeticoperators.html - http://www.maths.lth.se/na/courses/NUM115/NUM115-11/backslash.html

...