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 and N. Nachtigal, QMR: a quasi-minimal residual method for non-Hermitian linear systems, Numerische Mathematik, 1991, 60, pp. 315–339.
- R. Barrett, M. Berry, T. Chan, J. Demmel, J. Donato, J. Dongarra, V. Eijkhour, R. Pozo, C. Romine, and H. van der Vorst, Templates for the solution of linear systems: Building blocks for iterative methods, SIAM, 2nd ed., 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 может быть передана в виде матрицы, функции-обработчика или встроенной функции
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/v9.2.0/Specialized-Solvers.html