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 — вектор, содержащий относительный предобусловленный остаток на каждой итерации, включая нулевую итерацию
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квазиминимальным итерационным методом остатка (без упреждающего просмотра).- 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–2026 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.4.0/Specialized-Solvers.html