И другие программы этой серии
Далее мы приведем другой пример решения, при котором используется представление вектора B в виде вектора-столбца.
8.2. Решение СЛУ
с разреженными матрицами
Решение СЛУ с разреженными матрицами – хотя и не единственная, но, несомненно, одна из основных сфер применения аппарата разреженных матриц, описанного в уроке 5. Ниже приведены функции, относящиеся к этой области применения разреженных матриц. Большинство описанных методов относится к итерационным, то есть к тем, решение которых получается в ходе ряда шагов – итераций, постепенно ведущих к получению результата с заданной погрешностью или с максимальным правдоподобием. Описанные ниже функции MATLAB могут применяться и при решении обычных СЛУ (без разреженных матриц), что и демонстрируют приведенные ниже примеры.
8.2.1. Точное решение, метод наименьших квадратов и сопряженных градиентов
Начнем описание точных решений СЛУ с приведенных ниже функций.
• lsqr(A, B) – возвращает точное решение X СЛУ A*X=B, если оно существует, в противном случае возвращает решение по итерационному методу наименьших квадратов. Матрица коэффициентов A должна быть прямоугольной размера m×n, а вектор-столбец правых частей уравнений B должен иметь размер m. Условие m>=n может быть и необязательным. Функция lsqr начинает итерации от начальной оценки, по умолчанию представляющей собой вектор длиной n, состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равного min(20,m, n) – либо 20, либо числу уравнений, либо числу неизвестных). Сходимость достигается, когда отношение вторых норм векторов norm(B–Ax)/norm(B) меньше или равно погрешности метода tol (по умолчанию 1e–6).
• lsqr(A,B,tol) – возвращает решение с заданной погрешностью (порогом отбора) tol.
• lsqr(A,b,tol,maxit) – возвращает решение при заданном максимальном числе итераций maxit вместо, возможно, чересчур малого числа, заданного по умолчанию.
• lsqr(A,b,tol,maxit,M) и lsqr(A,b,tol,maxit,M1,M2) – при решении используется матрица предусловий M или M=M1*M2, так что производится решение системы inv(M)*A*x=inv(M)*b относительно x.
Начало в части 1