18.5 Специализированные решатели
- : x = bicg (A, b) ¶
- : x = bicg (A, b, tol) ¶
- : x = bicg (A, b, tol, maxit) ¶
- : x = bicg (A, b, tol, maxit, M) ¶
- : x = bicg (A, b, tol, maxit, M1, M2) ¶
- : x = bicg (A, b, tol, maxit, M, [], x0) ¶
- : x = bicg (A, b, tol, maxit, M1, M2, x0) ¶
- : x = bicg (A, b, tol, maxit, M, [], x0, …) ¶
- : x = bicg (A, b, tol, maxit, M1, M2, x0, …) ¶
- : [x, flag, relres, iter, resvec] = bicg (A, b, …) ¶
-
Решает систему линейных уравнений
A * x = bс помощью итерационного метода Би-сопряжённых градиентов.Входные аргументы:
- A — матрица системы линейных уравнений, должна быть квадратной. A может быть передана как матрица, функция-обработчик или встроенная функция
Afcnтаким образом, чтоAfcn (x, "notransp") = A * xиAfcn (x, "transp") = A' * x. Дополнительные параметры кAfcnмогут быть переданы после x0. - b — вектор правой части. Должен быть вектором-столбцом с тем же числом строк, что и у A.
- tol — требуемая относительная погрешность остатка,
b - A * x. Итерация останавливается, еслиnorm (b - A * x)≤tol * norm (b). Если tol опущена или пуста, то используется погрешность 1e-6. - maxit — максимальное количество итераций; если maxit опущена или пуста, то используется значение 20.
- M1, M2 — прекондиционеры. Прекондиционер M задаётся как
M = M1 * M2. M1 и M2 могут быть переданы как матрица или как функция-обработчик или встроенная функцияgтак чтоg (x, "notransp") = M1 \ xилиg (x, "notransp") = M2 \ xиg (x, "transp") = M1' \ xилиg (x, "transp") = M2' \ x. Если M1 опущена или пуста, то прекондиционирование не применяется. Предварительно обусловленная система теоретически эквивалентна применению методаbicgк системе линейных уравненийinv (M1) * A * inv (M2) * y = inv (M1) * bиinv (M2') * A' * inv (M1') * z = inv (M2') * bи затем установлениюx = inv (M2) * y. - x0 — начальное приближение. Если x0 опущена или пуста, то функция устанавливает x0 по умолчанию в нулевой вектор.
Любые аргументы, которые следуют за x0, обрабатываются как параметры и передаются соответствующим образом в любые функции (Afcn или Mfcn) или которые были заданы для
bicg.Выходные параметры:
- x — вычисленное приближение решения
A * x = b. Если алгоритм не сошёлся, то x — итерация с минимальным остатком. - flag указывает на статус завершения:
- 0: Алгоритм сошёлся в пределах заданной погрешности.
- 1: Алгоритм не сошёлся и достиг максимального числа итераций.
- 2: Матрица прекондиционера является вырожденной.
- 3: Алгоритм застыл, т. е. абсолютное значение разницы между текущей итерацией x и предыдущей меньше, чем
eps * norm (x,2). - 4: Алгоритм не может продолжить, так как промежуточные значения стали слишком малыми или слишком большими для надёжного вычисления.
- relres — отношение конечного остатка к его начальному значению, измеренное в евклидовой норме.
- iter — итерация, на которой вычислено x.
- resvec — вектор, содержащий остаток на каждой итерации. Общее число выполненных итераций задаётся значением
length (resvec) - 1.
Рассмотрим тривиальную задачу с треугольной матрицей
n = 20; A = toeplitz (sparse ([1, 1], [1, 2], [2, 1] * n ^ 2, 1, n)) + ... toeplitz (sparse (1, 2, -1, 1, n) * n / 2, ... sparse (1, 2, 1, 1, n) * n / 2); b = A * ones (n, 1); restart = 5; [M1, M2] = ilu (A); # in this tridiag case, it corresponds to lu (A) M = M1 * M2; Afcn = @(x, string) strcmp (string, "notransp") * (A * x) + ... strcmp (string, "transp") * (A' * x); Mfcn = @(x, string) strcmp (string, "notransp") * (M \ x) + ... strcmp (string, "transp") * (M' \ x); M1fcn = @(x, string) strcmp (string, "notransp") * (M1 \ x) + ... strcmp (string, "transp") * (M1' \ x); M2fcn = @(x, string) strcmp (string, "notransp") * (M2 \ x) + ... strcmp (string, "transp") * (M2' \ x);ПРИМЕР 1: самое простое использование
bicgx = bicg (A, b)
ПРИМЕР 2:
bicgс функцией, вычисляющейA*xиA'*xx = bicg (Afcn, b, [], n)
ПРИМЕР 3:
bicgс матрицей прекондиционера Mx = bicg (A, b, 1e-6, n, M)
ПРИМЕР 4:
bicgс функцией в качестве прекондиционераx = bicg (Afcn, b, 1e-6, n, Mfcn)
ПРИМЕР 5:
bicgс матрицами прекондиционеров M1 и M2x = bicg (A, b, 1e-6, n, M1, M2)
ПРИМЕР 6:
bicgс функциями в качестве прекондиционеровx = bicg (Afcn, b, 1e-6, n, M1fcn, M2fcn)
ПРИМЕР 7:
bicgс функцией, требующей аргументfunction y = Ap (A, x, string, z) ## compute A^z * x or (A^z)' * x y = x; if (strcmp (string, "notransp")) for i = 1:z y = A * y; endfor elseif (strcmp (string, "transp")) for i = 1:z y = A' * y; endfor endif endfunction Apfcn = @(x, string, p) Ap (A, x, string, p); x = bicg (Apfcn, b, [], [], [], [], [], 2);Ссылка:
Y. Saad, Итерационные методы для разреженных систем линейных уравнений, Второе издание, 2003, SIAM.
- A — матрица системы линейных уравнений, должна быть квадратной. A может быть передана как матрица, функция-обработчик или встроенная функция
- : x = bicgstab (A, b, tol, maxit, M1, M2, x0, …) ¶
- : x = bicgstab (A, b, tol, maxit, M, [], x0, …) ¶
- : [x, flag, relres, iter, resvec] = bicgstab (A, b, …) ¶
-
Решить
A x = bс помощью итерационного метода стабилизированного бисопряжённого градиента.Входные параметры:
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
Afcnтаким образом, чтоAfcn(x) = A * x. Дополнительные параметры дляAfcnпередаются после x0. - - b — вектор правой части. Он должен быть столбцовым вектором с таким же числом строк, как у A.
- - tol — требуемая относительная точность для остаточной ошибки,
b - A * x. Итерация останавливается, еслиnorm (b - A * x)≤tol * norm (b). Если tol опущено или пусто, используется толерантность 1e-6. - - maxit — максимальное число внешних итераций, если не задано или установлено в [], используется значение по умолчанию
min (20, numel (b)). - - M1, M2 — прекондиционеры. Прекондиционер M задаётся как
M = M1 * M2. Оба M1 и M2 могут быть переданы как матрица или как дескриптор функции или встроенная функцияgтаким образом, чтоg(x) = M1 \ xилиg(x) = M2 \ x. Используется правое прекондиционирование, т.е., сначала решаетсяA * inv (M) * y = bи затемx = inv (M) * y. - - x0 — начальное приближение, если не задано или установлено в [], используется значение по умолчанию
zeros (size (b)).
Аргументы, следующие за x0, обрабатываются как параметры и передаются должным образом любым функциям (A или M), которые передаются в
bicstab.Выходные параметры:
- - x — вычисленное приближение. Если метод не сходится, то это итерация с минимальным остатком.
- - flag указывает статус завершения:
- - 0: итерация сошлась в пределах выбранной толерантности
- - 1: максимальное число итераций достигнуто до сходимости
- - 2: матрица прекондиционера является вырожденной
- - 3: алгоритм достиг застоя
- - 4: алгоритм не может продолжить из-за деления на ноль
- - relres — относительный остаток, полученный как
(A*x-b) /.norm(b) - - iter — (возможно половина) итерация, на которой вычисляется x. Если это половина итерации, то это
iter + 0.5 - - resvec — вектор, содержащий остаток каждой полу- и полной итерации (Также есть полу-итерации, так как x вычисляется в два этапа на каждой итерации). Используя
(length(resvec) - 1) / 2можно увидеть общее количество (полных) итераций, выполненных.
Рассмотрим тривиальную задачу с треугольной матрицей
n = 20; A = toeplitz (sparse ([1, 1], [1, 2], [2, 1] * n ^ 2, 1, n)) + ... toeplitz (sparse (1, 2, -1, 1, n) * n / 2, ... sparse (1, 2, 1, 1, n) * n / 2); b = A * ones (n, 1); restart = 5; [M1, M2] = ilu (A); # in this tridiag case, it corresponds to lu (A) M = M1 * M2; Afcn = @(x) A * x; Mfcn = @(x) M \ x; M1fcn = @(x) M1 \ x; M2fcn = @(x) M2 \ x;ПРИМЕР 1: простейшее использование
bicgstabx = bicgstab (A, b, [], n)
ПРИМЕР 2:
bicgstabс функцией, которая вычисляетA * xx = bicgstab (Afcn, b, [], n)
ПРИМЕР 3:
bicgstabс матрицей-прекондиционером Mx = bicgstab (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
bicgstabс функцией в качестве прекондиционераx = bicgstab (Afcn, b, 1e-6, n, Mfcn)
ПРИМЕР 5:
bicgstabс матрицами-прекондиционерами M1 и M2x = bicgstab (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
bicgstabс функциями в качестве прекондиционеровx = bicgstab (Afcn, b, 1e-6, n, M1fcn, M2fcn)
ПРИМЕР 7:
bicgstabсо входом, требующим аргументfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfcn = @(x, string, p) Ap (A, x, string, p); x = bicgstab (Apfcn, b, [], [], [], [], [], 2);ПРИМЕР 8: явный пример, чтобы показать, что
bicgstabиспользует правое прекондиционирование[M1, M2] = ilu (A + 0.1 * eye (n)); # factorization of A perturbed M = M1 * M2; ## reference solution computed by bicgstab after one iteration [x_ref, fl] = bicgstab (A, b, [], 1, M) ## right preconditioning [y, fl] = bicgstab (A / M, b, [], 1) x = M \ y # compare x and x_ref
Ссылки:
Y. Saad, Итерационные методы для разреженных линейных систем, второе издание, 2003, SIAM
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
- : x = cgs (A, b, tol, maxit, M1, M2, x0, …) ¶
- : x = cgs (A, b, tol, maxit, M, [], x0, …) ¶
- : [x, flag, relres, iter, resvec] = cgs (A, b, …) ¶
-
Решить
A x = b, где A — квадратная матрица, используя метод сопряжённых градиентов в квадрате.Входные аргументы:
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
Afcnтаким образом, чтоAfcn(x) = A * x. Дополнительные параметры дляAfcnпередаются после x0. - - b — вектор правой части. Он должен быть столбцовым вектором с тем же числом строк, что и у A.
- - tol — относительная точность, если не задано или установлено в [], используется значение по умолчанию 1e-6.
- - maxit — максимальное число внешних итераций, если не задано или установлено в [], используется значение по умолчанию
min (20, numel (b)). - - M1, M2 — прекондиционеры. Матрица прекондиционера задаётся как
M = M1 * M2. Оба M1 и M2 могут быть переданы как матрица или как дескриптор функции или встроенная функцияgтаким образом, чтоg(x) = M1 \ xилиg(x) = M2 \ x. Если M1 пусто или не передано, прекондиционеры не применяются. Используется правое прекондиционирование, т.е., сначала решаетсяA*inv(M)*y = bи затемx = inv(M)*y. - - x0 — начальное приближение, если не задано или установлено в [], используется значение по умолчанию
zeros (size (b)).
Аргументы, следующие за x0, обрабатываются как параметры и передаются должным образом любым функциям (A или P), которые передаются в
cgs.Выходные параметры:
- - x — вычисленное приближение. Если метод не сходится, то это итерация с минимальным остатком.
- - flag указывает статус завершения:
- - 0: итерация сошлась в пределах выбранной толерантности
- - 1: максимальное число итераций достигнуто до сходимости
- - 2: матрица прекондиционера является вырожденной
- - 3: алгоритм достиг застоя
- - 4: алгоритм не может продолжить из-за деления на ноль
- - relres — относительный остаток, полученный как
(A*x-b) /.norm(b) - - iter — итерация, на которой вычисляется x.
- - resvec — вектор, содержащий остаток на каждой итерации. Используя
length(resvec) - 1можно увидеть общее количество выполненных итераций.
Рассмотрим тривиальную задачу с треугольной матрицей
n = 20; A = toeplitz (sparse ([1, 1], [1, 2], [2, 1] * n ^ 2, 1, n)) + ... toeplitz (sparse (1, 2, -1, 1, n) * n / 2, ... sparse (1, 2, 1, 1, n) * n / 2); b = A * ones (n, 1); restart = 5; [M1, M2] = ilu (A); # in this tridiag case it corresponds to chol (A)' M = M1 * M2; Afcn = @(x) A * x; Mfcn = @(x) M \ x; M1fcn = @(x) M1 \ x; M2fcn = @(x) M2 \ x;ПРИМЕР 1: простейшее использование
cgsx = cgs (A, b, [], n)
ПРИМЕР 2:
cgsс функцией, которая вычисляетA * xx = cgs (Afcn, b, [], n)
ПРИМЕР 3:
cgsс матрицей-прекондиционером Mx = cgs (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
cgsс функцией в качестве прекондиционераx = cgs (Afcn, b, 1e-6, n, Mfcn)
ПРИМЕР 5:
cgsс матрицами-прекондиционерами M1 и M2x = cgs (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
cgsс функциями в качестве прекондиционеровx = cgs (Afcn, b, 1e-6, n, M1fcn, M2fcn)
ПРИМЕР 7:
cgsсо входом, требующим аргументfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfcn = @(x, string, p) Ap (A, x, string, p); x = cgs (Apfcn, b, [], [], [], [], [], 2);ПРИМЕР 8: явный пример, чтобы показать, что
cgsиспользует правое прекондиционирование[M1, M2] = ilu (A + 0.3 * eye (n)); # factorization of A perturbed M = M1 * M2; ## reference solution computed by cgs after one iteration [x_ref, fl] = cgs (A, b, [], 1, M) ## right preconditioning [y, fl] = cgs (A / M, b, [], 1) x = M \ y # compare x and x_ref
Ссылки:
Y. Saad, Итерационные методы для разреженных линейных систем, второе издание, 2003, SIAM
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
- : x = gmres (A, b, restart, tol, maxit, M1, M2, x0, …) ¶
- : x = gmres (A, b, restart, tol, maxit, M, [], x0, …) ¶
- : [x, flag, relres, iter, resvec] = gmres (A, b, …) ¶
-
Решить
A x = bс помощью итерационного метода GMRES с предварительной обработкой и перестартом, также известного как PGMRES(restart).Входные аргументы:
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
Afcnтаким образом, чтоAfcn(x) = A * x. Дополнительные параметры дляAfcnпередаются после x0. - - b — вектор правой части. Он должен быть вектором-столбцом с тем же числом строк, что и у A.
- - restart — число итераций перед перестартом метода. Если это [] или N = numel (b), то перестрат не применяется.
- - tol — требуемая относительная погрешность преобразованного остатка,
inv (M) * (b - a * x). Итерации прекращаются, еслиnorm (inv (M) * (b - a * x)) ≤ tol * norm (inv (M) * B). Если tol опущена или пуста, используется значение 1e-6. - - maxit — максимальное число внешних итераций. Если не указано или задано как [], используется значение по умолчанию
min (10, N / restart). Обратите внимание, что если restart пусто, то maxit является максимальным числом итераций. Если restart и maxit не пусты, то максимальное число итераций равноrestart * maxit. Если оба restart и maxit пусты, максимальное число итераций устанавливается вmin (10, N). - - M1, M2 — предварительные условия. Предварительное условие M задаётся как
M = M1 * M2. Оба M1 и M2 могут быть переданы как матрица, дескриптор функции или встроенная функцияgтаким образом, чтоg(x) = M1 \ xилиg(x) = M2 \ x. Если M1 — [] или не задано, предварительное условие не применяется. Используется левая предварительная обработка, то есть решаетсяinv(M) * A * x = inv(M) * bвместоA * x = b. - - x0 — начальное приближение. Если не задано или равно [], используется значение по умолчанию
zeros (size (b)).
Аргументы, следующие за x0, рассматриваются как параметры и передаются соответствующим образом любой из функций (A или M или M1 или M2), которые переданы
gmres.Выходные данные:
- - x — вычисленное приближение. Если метод не сходится, это итерация с минимальным остатком.
- - flag — код выхода:
- 0 : итерация сошлась в пределах заданной погрешности
- 1 : максимальное число итераций превышено
- 2 : матрица предварительного условия вырождена
- 3 : алгоритм достиг стагнации (относительная разница между двумя
последовательными итерациями меньше eps)
- - relres — значение относительного преобразованного остатка приближения x.
- - iter — вектор, содержащий количество внешних и внутренних итераций, выполненных для вычисления x. Это:
- iter(1): число внешних итераций, т.е. сколько раз метод был перезапущен. (Если restart пусто или N, то 1, иначе 1 ≤ iter(1) ≤ maxit).
- iter(2): число итераций, выполненных перед перестартом, т.е. метод перезапускается, когда
iter(2) = restart. Если restart пусто или N, то 1 ≤ iter(2) ≤ maxit.
Для большей ясности, приближение x вычисляется на итерации
(iter(1) - 1) * restart + iter(2). Поскольку выходной результат x соответствует решению с минимальным преобразованным остатком, общее число итераций, выполненных методом, задаётсяlength (resvec) - 1. - - resvec — вектор, содержащий преобразованные относительные остатки на каждой итерации, включая 0-ю итерацию
norm (A * x0 - b).
Рассмотрим тривиальную задачу с треугольной матрицей
n = 20; A = toeplitz (sparse ([1, 1], [1, 2], [2, 1] * n ^ 2, 1, n)) + ... toeplitz (sparse (1, 2, -1, 1, n) * n / 2, ... sparse (1, 2, 1, 1, n) * n / 2); b = A * ones (n, 1); restart = 5; [M1, M2] = ilu (A); # in this tridiag case, it corresponds to lu (A) M = M1 * M2; Afcn = @(x) A * x; Mfcn = @(x) M \ x; M1fcn = @(x) M1 \ x; M2fcn = @(x) M2 \ x;ПРИМЕР 1: самое простое использование
gmresx = gmres (A, b, [], [], n)
ПРИМЕР 2:
gmresс функцией, вычисляющейA * xx = gmres (Afcn, b, [], [], n)
ПРИМЕР 3: использование
gmresс перестартомx = gmres (A, b, restart);
ПРИМЕР 4:
gmresс матрицей предварительного условия M с перестартом и без негоx = gmres (A, b, [], 1e-06, n, M) x = gmres (A, b, restart, 1e-06, n, M)
ПРИМЕР 5:
gmresс функцией в качестве предварительного условияx = gmres (Afcn, b, [], 1e-6, n, Mfcn)
ПРИМЕР 6:
gmresс матрицами предварительных условий M1 и M2x = gmres (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 7:
gmresс функциями в качестве предварительных условийx = gmres (Afcn, b, 1e-6, n, M1fcn, M2fcn)
ПРИМЕР 8:
gmresв качестве входной функции, требующей аргументfunction y = Ap (A, x, p) # compute A^p * x y = x; for i = 1:p y = A * y; endfor endfunction Apfcn = @(x, p) Ap (A, x, p); x = gmres (Apfcn, b, [], [], [], [], [], [], 2);ПРИМЕР 9: явный пример, демонстрирующий, что
gmresиспользует левую предварительную обработку[M1, M2] = ilu (A + 0.1 * eye (n)); # factorization of A perturbed M = M1 * M2; ## reference solution computed by gmres after two iterations [x_ref, fl] = gmres (A, b, [], [], 1, M) ## left preconditioning [x, fl] = gmres (M \ A, M \ b, [], [], 1) x # compare x and x_ref
Ссылка:
Y. Saad, Итерационные методы для разреженных линейных систем, второе издание, 2003, SIAM
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана как матрица, дескриптор функции или встроенная функция
- : x = qmr (A, b, rtol, maxit, M1, M2, x0) ¶
- : x = qmr (A, b, rtol, maxit, P) ¶
- : [x, flag, relres, iter, resvec] = qmr (A, b, …) ¶
-
Решить
A x = bс помощью итерационного метода Quasi-Minimal Residual (без прогнозирования).- - rtol — относительная погрешность, если не указано или равно [], используется значение по умолчанию 1e-6.
- - maxit — максимальное число внешних итераций, если не указано или равно [], используется значение по умолчанию
min (20, numel (b)). - - x0 — начальное приближение, если не указано или равно [], используется значение по умолчанию
zeros (size (b)).
A может быть передана как матрица или как дескриптор функции или встроенная функция
fтаким образом, чтоf(x, "notransp") = A*xиf(x, "transp") = A'*x.Предварительное условие P задаётся как
P = M1 * M2. Оба M1 и M2 могут быть переданы как матрица, дескриптор функции или встроенная функцияgтаким образом, чтоg(x, "notransp") = M1 \ xилиg(x, "notransp") = M2 \ xиg(x, "transp") = M1' \ xилиg(x, "transp") = M2' \ x.Если вызов осуществляется с более чем одним выходным параметром
- - flag — код выхода:
- - 0: итерация сошлась в пределах выбранной точности
- - 1: максимальное число итераций было достигнуто до сходимости
- - 3: алгоритм достиг стагнации
(значение 2 не используется, но пропущено для совместимости).
- - relres — конечное значение относительного остатка.
- - iter — число выполненных итераций.
- - resvec — вектор, содержащий нормы остатка на каждой итерации.
Ссылки:
- R. Freund и N. Nachtigal, QMR: метод квазиминимального остатка для неэрмитовых линейных систем, Numerische Mathematik, 1991, 60, стр. 315–339.
- R. Barrett, M. Berry, T. Chan, J. Demmel, J. Donato, J. Dongarra, V. Eijkhour, R. Pozo, C. Romine, и H. van der Vorst, Шаблоны для решения линейных систем: строительные блоки для итерационных методов, SIAM, 2-е изд., 1994.
- : x = tfqmr (A, b, tol, maxit, M1, M2, x0, …) ¶
- : x = tfqmr (A, b, tol, maxit, M, [], x0, …) ¶
- : [x, flag, relres, iter, resvec] = tfqmr (A, b, …) ¶
-
Решить
A x = bс помощью метода qmr с транспонированным деревом, основанного на методе cgs.Параметры входных данных:
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана в виде матрицы, функции-обработчика или встроенной функции
Afcnтаким образом, чтобыAfcn(x) = A * x. Дополнительные параметры дляAfcnпередаются после x0. - - b — вектор правой части. Он должен быть вектором-столбцом с тем же числом строк, что и у A.
- - tol — относительная погрешность; если не задана или установлена в [], используется значение по умолчанию 1e-6.
- - maxit — максимальное число внешних итераций; если не задана или установлена в [], используется значение по умолчанию
min (20, numel (b)). Для совместимости, поскольку метод имеет разное поведение при нечетном или четном числе итераций, рассматривается как итерация вtfqmrвесь цикл нечетных-четных итераций. То есть, для выполнения одной полной итерации алгоритм выполняет две под-итерации: нечетную и четную. - - M1, M2 — прекондиционеры. Прекондиционер M задается как
M = M1 * M2. M1 и M2 могут быть переданы в виде матрицы, функции-обработчика или встроенной функцииgтаким образом, чтобыg(x) = M1 \ xилиg(x) = M2 \ x. Используется метод правого прекондиционирования, т.е. сначала решаетсяA*inv(M)*y = bи затемx = inv(M)*y, а неA x = b. - - x0 — начальное приближение; если не задано или установлено в [], используется значение по умолчанию
zeros (size (b)).
Аргументы, следующие за x0, обрабатываются как параметры и передаются надлежащим образом в любые функции (A или M), которые передаются в
tfqmr.Параметры вывода:
- - x — вычисленное приближение. Если метод не сходится, возвращается значение с минимальным остатком.
- - flag — показывает статус завершения:
- - 0: итерации сошлись в пределах выбранной точности
- - 1: максимальное число итераций достигнуто до сходимости
- - 2: матрица прекондиционера вырождена
- - 3: алгоритм достиг стагнации
- - 4: алгоритм не может продолжить из-за деления на ноль
- - relres — относительный остаток, вычисленный как
(A*x-b) /.norm (b) - - iter — итерация, на которой вычислено x.
- - resvec — вектор, содержащий остаток на каждой итерации (включая
norm (b - A x0)). Выполнивlength (resvec) - 1, можно увидеть общее количество выполненных итераций.
Рассмотрим тривиальную задачу с треугольной матрицей
n = 20; A = toeplitz (sparse ([1, 1], [1, 2], [2, 1] * n ^ 2, 1, n)) + ... toeplitz (sparse (1, 2, -1, 1, n) * n / 2, ... sparse (1, 2, 1, 1, n) * n / 2); b = A * ones (n, 1); restart = 5; [M1, M2] = ilu (A); # in this tridiag case it corresponds to chol (A)' M = M1 * M2; Afcn = @(x) A * x; Mfcn = @(x) M \ x; M1fcn = @(x) M1 \ x; M2fcn = @(x) M2 \ x;ПРИМЕР 1: самое простое использование
tfqmrx = tfqmr (A, b, [], n)
ПРИМЕР 2:
tfqmrс функцией, которая вычисляетA * xx = tfqmr (Afcn, b, [], n)
ПРИМЕР 3:
tfqmrс матрицей прекондиционера Mx = tfqmr (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
tfqmrс функцией в качестве прекондиционераx = tfqmr (Afcn, b, 1e-6, n, Mfcn)
ПРИМЕР 5:
tfqmrс матрицами прекондиционеров M1 и M2x = tfqmr (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
tfmqrс функциями в качестве прекондиционеровx = tfqmr (Afcn, b, 1e-6, n, M1fcn, M2fcn)
ПРИМЕР 7:
tfqmrсо входной функцией, требующей аргументаfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfcn = @(x, string, p) Ap (A, x, string, p); x = tfqmr (Apfcn, b, [], [], [], [], [], 2);ПРИМЕР 8: явный пример, показывающий, что
tfqmrиспользует правый прекондиционер[M1, M2] = ilu (A + 0.3 * eye (n)); # factorization of A perturbed M = M1 * M2; ## reference solution computed by tfqmr after one iteration [x_ref, fl] = tfqmr (A, b, [], 1, M) ## right preconditioning [y, fl] = tfqmr (A / M, b, [], 1) x = M \ y # compare x and x_ref
Ссылка:
Y. Saad, Итерационные методы для разреженных линейных систем, второе издание, 2003, SIAM
- - A — матрица линейной системы, она должна быть квадратной. A может быть передана в виде матрицы, функции-обработчика или встроенной функции
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Specialized-Solvers.html