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 может быть передана как матрица, дескриптор функции или анонимная функция
Afunтаким образом, чтоAfun (x, "notransp") = A * xиAfun (x, "transp") = A' * x. Дополнительные параметры дляAfunмогут быть переданы после 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, рассматриваются как параметры и передаются соответствующим образом в любые функции (Afun или Mfun) или которые были предоставлены
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; Afun = @(x, string) strcmp (string, "notransp") * (A * x) + ... strcmp (string, "transp") * (A' * x); Mfun = @(x, string) strcmp (string, "notransp") * (M \ x) + ... strcmp (string, "transp") * (M' \ x); M1fun = @(x, string) strcmp (string, "notransp") * (M1 \ x) + ... strcmp (string, "transp") * (M1' \ x); M2fun = @(x, string) strcmp (string, "notransp") * (M2 \ x) + ... strcmp (string, "transp") * (M2' \ x);ПРИМЕР 1: самое простое использование
bicgx = bicg (A, b)
ПРИМЕР 2:
bicgс функцией, которая вычисляетA*xиA'*xx = bicg (Afun, b, [], n)
ПРИМЕР 3:
bicgс матрицей предварительного условия Mx = bicg (A, b, 1e-6, n, M)
ПРИМЕР 4:
bicgс функцией как предварительным условиемx = bicg (Afun, b, 1e-6, n, Mfun)
ПРИМЕР 5:
bicgс матрицами предварительного условия M1 и M2x = bicg (A, b, 1e-6, n, M1, M2)
ПРИМЕР 6:
bicgс функциями как предварительными условиямиx = bicg (Afun, b, 1e-6, n, M1fun, M2fun)
ПРИМЕР 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 Apfun = @(x, string, p) Ap (A, x, string, p); x = bicg (Apfun, 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 может быть передана как матрица, дескриптор функции или анонимная функция
Afunтаким образом, чтоAfun(x) = A * x. Дополнительные параметры дляAfunпередаются после 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; Afun = @(x) A * x; Mfun = @(x) M \ x; M1fun = @(x) M1 \ x; M2fun = @(x) M2 \ x;ПРИМЕР 1: самое простое использование
bicgstabx = bicgstab (A, b, [], n)
ПРИМЕР 2:
bicgstabс функцией, которая вычисляетA * xx = bicgstab (Afun, b, [], n)
ПРИМЕР 3:
bicgstabс матрицей предварительного условия Mx = bicgstab (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
bicgstabс функцией как предварительным условиемx = bicgstab (Afun, b, 1e-6, n, Mfun)
ПРИМЕР 5:
bicgstabс матрицами предварительного условия M1 и M2x = bicgstab (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
bicgstabс функциями как предварительными условиямиx = bicgstab (Afun, b, 1e-6, n, M1fun, M2fun)
ПРИМЕР 7:
bicgstabс функцией, требующей аргумента в качестве входных данныхfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfun = @(x, string, p) Ap (A, x, string, p); x = bicgstab (Apfun, 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 может быть передана как матрица, функция-обработчик или встроенная функция
Afunтаким образом, чтоAfun(x) = A * x. Дополнительные параметры кAfunпередаются после 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; Afun = @(x) A * x; Mfun = @(x) M \ x; M1fun = @(x) M1 \ x; M2fun = @(x) M2 \ x;ПРИМЕР 1: самое простое использование
cgsx = cgs (A, b, [], n)
ПРИМЕР 2:
cgsс функцией, которая вычисляетA * xx = cgs (Afun, b, [], n)
ПРИМЕР 3:
cgsс матрицей прекондиционера Mx = cgs (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
cgsс функцией в качестве прекондиционераx = cgs (Afun, b, 1e-6, n, Mfun)
ПРИМЕР 5:
cgsс матрицами прекондиционеров M1 и M2x = cgs (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
cgsс функциями в качестве прекондиционеровx = cgs (Afun, b, 1e-6, n, M1fun, M2fun)
ПРИМЕР 7:
cgsс функцией в качестве входного параметра, требующего аргументаfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfun = @(x, string, p) Ap (A, x, string, p); x = cgs (Apfun, 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 может быть передана как матрица, функция-обработчик или встроенная функция
Afunтаким образом, чтоAfun(x) = A * x. Дополнительные параметры кAfunпередаются после 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; Afun = @(x) A * x; Mfun = @(x) M \ x; M1fun = @(x) M1 \ x; M2fun = @(x) M2 \ x;ПРИМЕР 1: самое простое использование
gmresx = gmres (A, b, [], [], n)
ПРИМЕР 2:
gmresс функцией, которая вычисляетA * xx = gmres (Afun, 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 (Afun, b, [], 1e-6, n, Mfun)
ПРИМЕР 6:
gmresс матрицами прекондиционеров M1 и M2x = gmres (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 7:
gmresс функциями в качестве прекондиционеровx = gmres (Afun, b, 1e-6, n, M1fun, M2fun)
ПРИМЕР 8:
gmresс функцией в качестве входного параметра, требующего аргументаfunction y = Ap (A, x, p) # compute A^p * x y = x; for i = 1:p y = A * y; endfor endfunction Apfun = @(x, p) Ap (A, x, p); x = gmres (Apfun, 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с помощью итерационного метода квази-минимального остатка (без предвычислений).- - 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с использованием метода Transpose-Tree qmr, основанного на методе cgs.Параметры ввода:
- - A — матрица системы линейных уравнений, и она должна быть квадратной. A может быть передан как матрица, дескриптор функции или встроенная функция
Afunтаким образом, чтоAfun(x) = A * x. Дополнительные параметры дляAfunпередаются после 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; Afun = @(x) A * x; Mfun = @(x) M \ x; M1fun = @(x) M1 \ x; M2fun = @(x) M2 \ x;ПРИМЕР 1: простое использование
tfqmrx = tfqmr (A, b, [], n)
ПРИМЕР 2:
tfqmrс функцией, которая вычисляетA * xx = tfqmr (Afun, b, [], n)
ПРИМЕР 3:
tfqmrс матрицей предобуславливания Mx = tfqmr (A, b, [], 1e-06, n, M)
ПРИМЕР 4:
tfqmrс функцией в качестве предобуславливанияx = tfqmr (Afun, b, 1e-6, n, Mfun)
ПРИМЕР 5:
tfqmrс матрицами предобуславливания M1 и M2x = tfqmr (A, b, [], 1e-6, n, M1, M2)
ПРИМЕР 6:
tfmqrс функциями в качестве предобуславливанияx = tfqmr (Afun, b, 1e-6, n, M1fun, M2fun)
ПРИМЕР 7:
tfqmrс функцией, требующей аргументаfunction y = Ap (A, x, z) # compute A^z * x y = x; for i = 1:z y = A * y; endfor endfunction Apfun = @(x, string, p) Ap (A, x, string, p); x = tfqmr (Apfun, 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–2022 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/v5.2.0/Specialized-Solvers.html