И другие программы этой серии
OOOOi
Введенные в этом примере матрица A и вектор B будут использованы и в других примерах данного раздела. В приведенном ниже примере процесс итераций сходится на пятом шаге с относительным остатком (отношением вторых норм векторов невязки и свободных членов) 1.9 10–13:
>> lsqr(A,B,1e-6,5)
lsqr converged at iteration 5 to a solution with relative residual
1.9e-013
ans =
1.0000
2.0000
3.0000
4.0000
А теперь проверим работу функции lsqr на решении системы из трех линейных уравнений с частично комплексными элементами:
>> A=[4+i 0.24 -0.08;0.09 3 -0.15; 0.04 -0.08 4+i] A =
4.0000 + 1.0000i
0.0900
0.0400 >> B=[8 9 20] B = 8 9 20
>> lsqr(A,B’)
lsqr stopped at iteration 3 without converging to the desired tolerance 1e-006 because the maximum number of iterations was reached. The iterate returned (number 3) has relative residual 3.5e-017 ans =
1.7870 – 0.4677i
3.1839 – 0.0452i
4.7499 – 1.1837i >> A*X ans =
8.0000 – 0.0000i
9.0000 – 0.0000i 20.0000 + 0.0000i
8.2.2. Двунаправленный метод сопряженных градиентов
Решение СЛУ с разреженной матрицей возможно также известным двунаправленным методом сопряженных градиентов. Он реализован указанной ниже функцией.
• bicg(A, B) – возвращает решение X СЛУ A*X=B. Матрица коэффициентов A должна быть квадратной размера n×n, а вектор-столбец правых частей уравнений B должен иметь длину n. Функция bicg начинает итерации от начальной оценки, по умолчанию представляющей собой вектор длиной n,
состоящий из нулей. Итерации производятся или до сходимости к решению, или до появления ошибки, или до достижения максимального числа итераций (по умолчанию равно min(20,n) – либо 20, либо числу уравнений). Сходимость достигается, когда относительный остаток norm(B–A*x)/ norm(B) меньше или равен погрешности метода (по умолчанию 1e–6). Благодаря использованию двунаправленного метода сопряженных градиентов bicg сходится за меньшее число итераций, чем lsqr (в нашем примере быстрее на одну итерацию), но требует квадратную матрицу A, отбрасывая информацию, содержащуюся в дополнительных уравнениях, в то время как lsqr работает и с прямоугольной матрицей.
• bicg(A,B,tol) – выполняет и возвращает решение с погрешностью (порогом отбора) tol.
• bicg(A,b,tol,maxit) – выполняет и возвращает решение при заданном максимальном числе итераций maxit.
• bicg(A,b,tol,maxit,M) и bicg(A,b,tol,maxit,M1,M2) – при решении используется матрица предусловий M или M=M1*M2, так что производится решение системы inv(M)*A*x=inv(M)*b относительно x.
Начало в части 1