exponenta event banner

gmres

Система решения линейных уравнений - обобщенный метод минимального остатка

Описание

пример

x = gmres(A,b) попытки решить систему линейных уравнений A*x = b для x с использованием Обобщенного метода минимального остаточного значения. При успешной попытке gmres отображает сообщение для подтверждения сходимости. Если gmres не сходится после максимального количества итераций или останавливается по какой-либо причине, отображается диагностическое сообщение, включающее относительный остаток norm(b-A*x)/norm(b) и номер итерации, на котором остановился метод. Для этого синтаксиса: gmres не перезапускается; максимальное количество итераций: min(size(A,1),10).

пример

x = gmres(A,b,restart) перезапускает метод каждый restart внутренние итерации. Максимальное число внешних итераций: outer = min(size(A,1)/restart,10). Максимальное число итераций: restart*outer, так как gmres выступает restart внутренние итерации для каждой внешней итерации. Если restart является size(A,1) или [], то gmres не перезапускается, и максимальное количество итераций - min(size(A,1),10).

пример

x = gmres(A,b,restart,tol) задает допуск для метода. Допуск по умолчанию: 1e-6.

пример

x = gmres(A,b,restart,tol,maxit) задает максимальное количество внешних итераций таким образом, чтобы общее число итераций не превышало restart*maxit. Если maxit является [] тогда gmres использует значение по умолчанию, min(size(A,1)/restart,10). Если restart является size(A,1) или [], то максимальное количество итоговых итераций равно maxit (вместо restart*maxit). gmres отображает диагностическое сообщение, если оно не сходится в пределах максимального количества итераций.

пример

x = gmres(A,b,restart,tol,maxit,M) задает матрицу предварительного условия M и вычисляет x путем эффективного решения системы M 1Ax = M − 1b. Использование матрицы предварительного кондиционирования может улучшить числовые свойства задачи и эффективность вычисления.

пример

x = gmres(A,b,restart,tol,maxit,M1,M2) определяет коэффициенты матрицы предварительного условия M такой, что M = M1*M2.

пример

x = gmres(A,b,restart,tol,maxit,M1,M2,x0) задает начальное предположение для вектора решения x. По умолчанию используется вектор нулей.

пример

[x,flag] = gmres(___) возвращает флаг, указывающий, успешно ли сходился алгоритм. Когда flag = 0, конвергенция была успешной. Этот синтаксис вывода можно использовать с любой из предыдущих комбинаций входных аргументов. При указании flag вывод, gmres не отображает диагностические сообщения.

пример

[x,flag,relres] = gmres(___) также возвращает относительный остаток norm(M\(b-A*x))/norm(M\b), которая включает матрицу предварительного условия M. Если flag является 0, то relres <= tol.

пример

[x,flag,relres,iter] = gmres(___) также возвращает внутренние и внешние числа итераций, при которых x был вычислен как вектор [outer inner]. Номер внешней итерации находится в диапазоне 0 <= iter(1) <= maxit и внутренний номер итерации находится в диапазоне 0 <= iter(2) <= restart.

пример

[x,flag,relres,iter,resvec] = gmres(___) также возвращает вектор остаточных норм в каждой внутренней итерации, включая первый остаточный norm(M\(b-A*x0)). Это остаточные нормы для предварительно кондиционированной системы.

Примеры

свернуть все

Решение квадратной линейной системы с помощью gmres с настройками по умолчанию, а затем скорректировать допуск и количество итераций, используемых в процессе решения.

Создание случайной разреженной матрицы A с 50% плотностью и ненулем на главной диагонали. Также создать случайный вектор b для правой стороны Ax = b.

rng default
A = sprandn(400,400,0.5) + 12*speye(400);
b = rand(400,1);

Решить Ax = b с помощьюgmres. Выходной дисплей включает в себя значение относительной остаточной ошибки b-Ax ‖ b ‖.

x = gmres(A,b);
gmres stopped at iteration 10 without converging to the desired tolerance 1e-06
because the maximum number of iterations was reached.
The iterate returned (number 10) has relative residual 0.35.

По умолчанию gmres использует 10 итераций и допуск 1e-6и алгоритм не может сойтись в этих 10 итерациях для этой матрицы. Поскольку остаток все еще велик, это хороший показатель того, что требуется больше итераций (или матрица предварительного условия). Можно также использовать больший допуск, чтобы упростить сходимость алгоритма.

Повторное решение системы с использованием допуска 1e-4 и 100 итераций.

tol = 1e-4;
maxit = 100;
x = gmres(A,b,[],tol,maxit);
gmres stopped at iteration 100 without converging to the desired tolerance 0.0001
because the maximum number of iterations was reached.
The iterate returned (number 100) has relative residual 0.0045.

Даже при меньшем допуске и большем количестве итераций остаточная ошибка недостаточно улучшается для сходимости. Когда итеративный алгоритм останавливается таким образом, это является хорошим показателем того, что необходима матрица предварительного условия. Однако gmres также имеет вход, который управляет числом внутренних итераций. Задав значение для внутренних итераций, gmres выполняет больше работ на внешнюю итерацию.

Повторное решение системы с помощью restart значение 100 и a maxit значение 20. Вместо того, чтобы делать 100 итераций один раз, gmres выполняет 100 итераций между перезапусками и повторяет их 20 раз.

restart = 100;
maxit = 20;
x = gmres(A,b,restart,tol,maxit);
gmres(100) converged at outer iteration 2 (inner iteration 75) to a solution with relative residual 9.3e-05.

В этом случае задается большое значение перезапуска для gmres позволяет ему сходиться к решению в пределах допустимого числа итераций. Однако большие значения перезапуска могут потреблять много памяти, когда A также велик.

Анализ влияния использования матрицы предварительного кондиционирования без перезапуска gmres для решения линейной системы.

Загрузка west0479, вещественная несимметричная разреженная матрица 479 на 479.

load west0479
A = west0479;

Определить b так что истинное решение Ax = b является вектором всех.

b = sum(A,2);

Задайте допуск и максимальное количество итераций.

tol = 1e-12;
maxit = 20;

Использовать gmres для поиска решения по требуемому допуску и количеству итераций. Укажите пять выходов для возврата информации о процессе решения:

  • x является вычисленным решением для A*x = b.

  • fl0 - флаг, указывающий, сходился ли алгоритм.

  • rr0 - относительный остаток вычисленного ответа x.

  • it0 является двухэлементным вектором [outer inner] указание внутреннего и внешнего номеров итерации при x был вычислен.

  • rv0 является вектором остаточной истории для b-Ax ‖.

[x,fl0,rr0,it0,rv0] = gmres(A,b,[],tol,maxit);
fl0
fl0 = 1
rr0
rr0 = 0.7603
it0
it0 = 1×2

     1    20

fl0 равно 1, потому что gmres не сходится с требуемым допуском 1e-12 в пределах запрошенных 20 итераций. Лучшее приблизительное решение, которое gmres возвращает последнее (как указано it0(2) = 20). MATLAB сохраняет остаточную историю в rv0.

Чтобы помочь с медленной сходимостью, можно указать матрицу предварительного условия. С тех пор A несимметричен, используется ilu для создания устройства предварительного кондиционирования M = L U. Задание допуска перетаскивания для игнорирования недиагональных записей со значениями меньше 1e-6. Определите предварительно кондиционированную систему M-1A x = M-1b, указавL и U в качестве входных данных для gmres. Обратите внимание, что при указании предварительного условия gmres вычисляет остаточную норму системы предварительного кондиционирования для выходных данных rr1 и rv1.

[L,U] = ilu(A,struct('type','ilutp','droptol',1e-6));
[x1,fl1,rr1,it1,rv1] = gmres(A,b,[],tol,maxit,L,U);
fl1
fl1 = 0
rr1
rr1 = 7.2303e-14
it1
it1 = 1×2

     1     6

Использование ilu средство предварительного кондиционирования производит относительный остаток, меньший, чем предписанный допуск 1e-12 на шестой итерации. Первый остаток rv1(1) является norm(U\(L\b)), где M = L*U. Последний остаток rv1(end) является norm(U\(L\(b-A*x1))).

Вы можете следить за ходом выполнения gmres путем построения графика относительных остатков в каждой итерации. Постройте график остаточной истории каждого решения со строкой для заданного допуска.

semilogy(0:length(rv0)-1,rv0/norm(b),'-o')
hold on
semilogy(0:length(rv1)-1,rv1/norm(U\(L\b)),'-o')
yline(tol,'r--');
legend('No preconditioner','ILU preconditioner','Tolerance','Location','East')
xlabel('Iteration number')
ylabel('Relative residual')

Figure contains an axes. The axes contains 3 objects of type line, constantline. These objects represent No preconditioner, ILU preconditioner, Tolerance.

Использование предварительного условия с перезапущенным gmres.

Загрузка west0479, вещественная несимметричная разреженная матрица 479 на 479.

load west0479
A = west0479;

Определить b так что истинное решение Ax = b является вектором всех.

b = sum(A,2);

Постройте неполное предварительное кондиционирующее устройство логической единицы с допуском сброса 1e-6.

[L,U] = ilu(A,struct('type','ilutp','droptol',1e-6));

Преимущество перезапуска gmres означает ограничение объема памяти, необходимого для выполнения метода. Без перезапуска, gmres требует maxit векторы хранения для сохранения основы крыловского подпространства. Также, gmres должен ортогонализироваться по всем предыдущим векторам на каждом шаге. Перезапуск ограничивает объем используемой рабочей области и объем работы на одну внешнюю итерацию.

Выполнить gmres(3), gmres(4), и gmres(5) использование неполных коэффициентов логической единицы в качестве предварительных условий. Использовать допуск 1e-12 и максимум 20 внешних итераций.

tol = 1e-12;
maxit = 20;
[x3,fl3,rr3,it3,rv3] = gmres(A,b,3,tol,maxit,L,U);
[x4,fl4,rr4,it4,rv4] = gmres(A,b,4,tol,maxit,L,U);
[x5,fl5,rr5,it5,rv5] = gmres(A,b,5,tol,maxit,L,U);
fl3
fl3 = 0
fl4
fl4 = 0
fl5
fl5 = 0

fl3, fl4, и fl5 равны 0, потому что в каждом случае перезапускаются gmres приводит относительный остаток к меньшему, чем предписанный допуск 1e-12.

На следующем графике показана история сходимости каждого перезапускаемого gmres способ. gmres(3) сходится на внешней итерации 5, внутренней итерации 3 (it3 = [5, 3]), которая будет такой же, как внешняя итерация 6, внутренняя итерация 0, следовательно, маркировка 6 на конечной отметке.

semilogy(1:1/3:6,rv3/norm(U\(L\b)),'-o');
h1 = gca;
h1.XTick = (1:6);
title('gmres(N) for N = 3, 4, 5')
xlabel('Outer iteration number');
ylabel('Relative residual');
hold on
semilogy(1:1/4:3,rv4/norm(U\(L\b)),'-o');
semilogy(1:1/5:2.8,rv5/norm(U\(L\b)),'-o');
yline(tol,'r--');
hold off
legend('gmres(3)','gmres(4)','gmres(5)','Tolerance')
grid on

Figure contains an axes. The axes with title gmres(N) for N = 3, 4, 5 contains 4 objects of type line, constantline. These objects represent gmres(3), gmres(4), gmres(5), Tolerance.

В общем, чем больше количество внутренних итераций, тем больше работа gmres делает за внешнюю итерацию и чем быстрее она может сойтись.

Проверить влияние подачи gmres с первоначальным предположением решения.

Создайте тридиагональную разреженную матрицу. Используйте сумму каждой строки в качестве вектора для правой стороны Ax = b, чтобы ожидаемое решение для x было вектором единиц.

n = 900;
e = ones(n,1);
A = spdiags([e 2*e e],-1:1,n,n);
b = sum(A,2);

Использовать gmres для решения Ax = b дважды: один раз с начальным предположением по умолчанию и один раз с хорошим начальным предположением решения. Используйте 200 итераций и допуск по умолчанию для обоих решений. Укажите начальное предположение во втором решении как вектор со всеми элементами, равными 0.99.

maxit = 200;
x1 = gmres(A,b,[],[],maxit);
gmres converged at iteration 27 to a solution with relative residual 9.5e-07.
x0 = 0.99*e;
x2 = gmres(A,b,[],[],maxit,[],[],x0);
gmres converged at iteration 7 to a solution with relative residual 6.7e-07.

В этом случае предоставление начального предположения позволяет gmres для более быстрого сближения.

Возврат промежуточных результатов

Вы также можете использовать начальное предположение для получения промежуточных результатов путем вызова gmres в цикле for. Каждый вызов решателя выполняет несколько итераций и сохраняет вычисленное решение. Затем это решение используется в качестве начального вектора для следующего пакета итераций.

Например, этот код выполняет 100 итераций четыре раза и сохраняет вектор решения после каждого прохода в цикле for:

x0 = zeros(size(A,2),1);
tol = 1e-8;
maxit = 100;
for k = 1:4
    [x,flag,relres] = gmres(A,b,[],tol,maxit,[],[],x0);
    X(:,k) = x;
    R(k) = relres;
    x0 = x;
end

X(:,k) - вектор решения, вычисленный при итерации k цикла for, и R(k) - относительный остаток этого решения.

Решение линейной системы путем предоставления gmres с дескриптором функции, который вычисляет A*x вместо матрицы коэффициентов A.

Одна из тестовых матриц Уилкинсона, сгенерированных gallery представляет собой тридиагональную матрицу 21 на 21. Предварительный просмотр матрицы.

A = gallery('wilk',21)
A = 21×21

    10     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     1     9     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     1     8     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     1     7     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     1     6     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     1     5     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     4     1     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     1     3     1     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     1     2     1     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1     1     1     0     0     0     0     0     0     0     0     0     0
      ⋮

Матрица Уилкинсона имеет специальную структуру, поэтому можно представить операцию A*x с дескриптором функции. Когда A умножает вектор, большинство элементов в полученном векторе равны нулю. Ненулевые элементы в результате соответствуют ненулевым тридиагональным элементам A. При этом только основная диагональ имеет ненулевые значения, не равные 1.

Выражение Ax становится следующим:

Ax=[1010⋯⋯⋯001910001810⋮⋮0171001610⋮⋮0151001410⋮⋮013⋱000⋱⋱100⋯⋯⋯0110] [x1x2x3x4x5⋮⋮x21]=[10x1+x2x1+9x2+x3x2+8x3+x4⋮x19+9x20+x21x20+10x21].

Результирующий вектор может быть записан как сумма трех векторов:

Ax=[0+10x1+x2x1+9x2+x3x2+8x3+x4⋮x19+9x20+x21x20+10x21+0]=[0x1⋮x20]+[10x19x2⋮10x21]+[x2⋮x210].

В MATLAB ® запишите функцию, которая создает эти векторы и добавляет их вместе, давая таким образом значение A*x:

function y = afun(x)
y = [0; x(1:20)] + ...
    [(10:-1:0)'; (1:10)'].*x + ...
    [x(2:21); 0];
end

(Эта функция сохраняется как локальная функция в конце примера.)

Теперь решите линейную систему Ax = b, предоставивgmres с дескриптором функции, который вычисляет A*x. Использовать допуск 1e-12, 15 внешних итераций и 10 внутренних итераций перед перезапуском.

b = ones(21,1);
tol = 1e-12;  
maxit = 15;
restart = 10;
x1 = gmres(@afun,b,restart,tol,maxit)
gmres(10) converged at outer iteration 5 (inner iteration 10) to a solution with relative residual 5.3e-13.
x1 = 21×1

    0.0910
    0.0899
    0.0999
    0.1109
    0.1241
    0.1443
    0.1544
    0.2383
    0.1309
    0.5000
      ⋮

Проверьте, что afun(x1) производит вектор из единиц.

afun(x1)
ans = 21×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
      ⋮

Локальные функции

function y = afun(x)
y = [0; x(1:20)] + ...
    [(10:-1:0)'; (1:10)'].*x + ...
    [x(2:21); 0];
end

Входные аргументы

свернуть все

Матрица коэффициентов, заданная как квадратная матрица или дескриптор функции. Эта матрица является матрицей коэффициентов в линейной системе A*x = b. Как правило, A - большая разреженная матрица или дескриптор функции, возвращающий произведение большой разреженной матрицы и вектора столбца.

Определение A как дескриптор функции

При необходимости можно указать матрицу коэффициентов в качестве дескриптора функции вместо матрицы. Дескриптор функции возвращает матрично-векторные произведения вместо формирования всей матрицы коэффициентов, делая вычисление более эффективным.

Для использования дескриптора функции используйте сигнатуру функции. function y = afun(x). Параметризация функций объясняет, как предоставить дополнительные параметры функции afun, при необходимости. Вызов функции afun(x) должен возвращать значение A*x.

Типы данных: double | function_handle
Поддержка комплексного номера: Да

Правая часть линейного уравнения, заданная как вектор-столбец. Длина b должно быть равно size(A,1).

Типы данных: double
Поддержка комплексного номера: Да

Число внутренних итераций перед перезапуском, указанное как скалярное целое число. Используйте этот ввод вместе с maxit ввод для управления максимальным количеством итераций, restart*maxit. Если restart является [] или size(A,1), то gmres не перезапускается, и общее число итераций равно maxit.

Большое restart значение обычно приводит к лучшему поведению сходимости, но также имеет более высокие требования к времени и памяти.

Типы данных: double

Допуск метода, заданный как положительный скаляр. Этот ввод используется для согласования точности и времени выполнения в расчете. gmres должен соответствовать допуску в пределах числа разрешенных итераций для успешного выполнения. Меньшее значение tol означает, что для успешного выполнения расчета ответ должен быть более точным.

Типы данных: double

Максимальное число внешних итераций, указанное как положительное скалярное целое число. Увеличение значения maxit разрешить больше итераций для gmres для соответствия допуску tol. Как правило, чем меньше значение tol, чем больше итераций требуется для успешного завершения вычисления.

Если restart также указан ввод, то общее количество итераций равно restart*maxit. В противном случае общее число итераций равно maxit.

Значение по умолчанию maxit зависит от того, restart указывается:

  • Если restart не указан или указан как [] или size(A,1), то значение по умолчанию maxit является min(size(A,1),10).

  • Если restart указывается как значение в диапазоне 1 <= restart < size(A,1), то значение по умолчанию maxit является min(ceil(size(A,1)/restart),10).

Типы данных: double

Матрицы предварительного условия, определенные как отдельные аргументы матриц или дескрипторов функций. Можно указать матрицу предварительного условия. M или его матричные коэффициенты M = M1*M2 улучшить численные аспекты линейной системы и упростить ее gmres чтобы быстро сойтись. Можно использовать неполные функции факторизации матрицы. ilu и ichol для формирования матриц предварительного условия. Вы также можете использовать equilibrate перед факторизацией для улучшения номера условия матрицы коэффициентов. Дополнительные сведения о предварительных кондиционирующих устройствах см. в разделе Итерационные методы для линейных систем.

gmres рассматривает неопределенные предварительные условия как матрицы идентичности.

Определение M как дескриптор функции

При необходимости можно указать любой из M, M1, или M2 в качестве дескрипторов функции вместо матриц. Дескриптор функции выполняет операции матрица-вектор вместо формирования всей матрицы предварительного условия, делая вычисление более эффективным.

Для использования дескриптора функции используйте сигнатуру функции. function y = mfun(x). Параметризация функций объясняет, как предоставить дополнительные параметры функции mfun, при необходимости. Вызов функции mfun(x) должен возвращать значение M\x или M2\(M1\x).

Типы данных: double | function_handle
Поддержка комплексного номера: Да

Начальное предположение, указанное как вектор столбца с длиной, равной size(A,2). Если вы можете предоставить gmres с более разумным начальным предположением x0 чем вектор нулей по умолчанию, то он может сэкономить время вычислений и помочь алгоритму быстрее сойтись.

Типы данных: double
Поддержка комплексного номера: Да

Выходные аргументы

свернуть все

Решение линейной системы, возвращаемое в виде вектора столбца. Этот выход дает приблизительное решение для линейной системы A*x = b. Если расчет выполнен успешно (flag = 0), то relres меньше или равно tol.

При неудачном выполнении расчета (flag ~= 0), решение x возвращено gmres - это норма с минимальной остаточной нормой, вычисленной по всем итерациям.

Флаг сходимости, возвращаемый как одно из скалярных значений в этой таблице. Флаг сходимости указывает, было ли вычисление успешным, и различает несколько различных форм отказа.

Значение флага

Сходимость

0

Успех - gmres сходится к требуемому допуску tol в maxit итерации.

1

Отказ - gmres повторенный maxit итерации, но не сходились.

2

Отказ - матрица предварительного кондиционирования M или M = M1*M2 плохо кондиционирован.

3

Отказ - gmres стагнация после двух последовательных итераций была одинаковой.

4

Сбой - одна из скалярных величин, вычисленных gmres алгоритм стал слишком маленьким или слишком большим для продолжения вычислений.

Относительная остаточная ошибка, возвращаемая как скаляр. Относительная остаточная ошибка relres = norm(M\(b-A*x))/norm(M\b) является показателем того, насколько точен ответ. Обратите внимание, что gmres включает в себя матрицу предварительного условия M в относительном остаточном расчете, в то время как большинство других итеративных решателей не делают. Если расчет сходится к допуску tol в maxit итерации, затем relres <= tol.

Типы данных: double

Внешние и внутренние числа итераций, возвращаемые как двухэлементный вектор [outer inner]. Эти выходные данные указывают внутренние и внешние числа итераций, при которых вычисленный ответ для x было рассчитано:

  • Если restart не указан или указан как [] или size(A,1), то outer = 1 и все итерации считаются внутренними итерациями.

  • Если restart указывается как значение в диапазоне 1 <= restart < size(A,1), то номер внешней итерации находится в диапазоне 0 <= outer <= maxit и внутренний номер итерации находится в диапазоне 0 <= inner <= restart.

Типы данных: double

Остаточная ошибка, возвращенная в виде вектора. Остаточная ошибка norm(M\(b-A*x)) показывает, насколько близок алгоритм к сходимости для данного значения x. Обратите внимание, что gmres включает в себя матрицу предварительного условия M в относительном остаточном вычислении, в то время как большинство других итеративных решателей не. Количество элементов в resvec равно общему числу итераций (если restart используется, это самое большее restart*maxit). Вы можете изучить содержимое resvec чтобы помочь решить, изменять ли значения restart, tol, или maxit.

Типы данных: double

Подробнее

свернуть все

Обобщенный метод минимального остатка

Обобщенный алгоритм минимального остатка (GMRES) был разработан для расширения алгоритма минимального остатка (MINRES) до несимметричных матриц.

Подобно методам сопряженных градиентов (CG), алгоритм GMRES вычисляет ортогональные последовательности, но GMRES должен хранить все предыдущие векторы в последовательностях. Это хранилище предыдущих векторов может потреблять много памяти, если его не контролировать. «Перезапущенная» версия алгоритма управляет хранением этих последовательностей, периодически очищая промежуточные последовательности и используя результаты в качестве начального значения в другой итерации.

Выбор подходящего значения «перезапуска» имеет важное значение для хорошей производительности, но выбор такого значения в основном является вопросом опыта. Если число итераций перед перезапуском слишком мало, алгоритм может быть очень медленным, чтобы сойтись или не сойтись полностью. Но если значение перезапуска слишком велико, алгоритм увеличивает требования к хранилищу и может выполнять ненужную работу [1].

Внутренние и внешние итерации

Внутренние итерации - это итерации, которые gmres завершается перед перезапуском. Можно указать количество внутренних итераций с помощью restart аргумент.

Каждый раз gmres перезапускается, номер внешней итерации увеличивается. Можно указать максимальное количество внешних итераций с помощью maxit аргумент. Количество внешних итераций по умолчанию: min(size(A,1)/restart,10).

Например, если не указать restart, то максимальное количество итераций определяется значением maxit, и gmres не перезапускается:

If the restart argument is not specified and the value of maxit is 4, then gmres performs a total of 4 iterations.

Однако при указании restart, gmres выполняет несколько внутренних итераций (указанных restart) для каждой внешней итерации (указывается maxit). В этом случае максимальное количество итераций равно restart*maxit:

If the restart argument is specified as 4, and the maxit argument is specified as 2, then gmres performs 4 inner iterations for each outer iteration for a total of 8 iterations.

Совет

  • Сходимость большинства итеративных методов зависит от номера условия матрицы коэффициентов, cond(A). Вы можете использовать equilibrate для улучшения количества условий A, и само по себе это облегчает для большинства итеративных решателей сходимость. Однако использование equilibrate также приводит к улучшению качества матриц предварительного кондиционирования при последующем факторизации уравновешенной матрицы B = R*P*A*C.

  • Можно использовать функции переупорядочивания матрицы, такие как dissect и symrcm перестановку строк и столбцов матрицы коэффициентов и минимизацию числа ненулевых значений, когда матрица коэффициентов факторизована для формирования предварительного условия. Это может уменьшить память и время, необходимое для последующего решения предварительно кондиционированной линейной системы.

Ссылки

[1] Барретт, Р., М. Берри, Т. Ф. Чан и др., Шаблоны для решения линейных систем: строительные блоки для итеративных методов, SIAM, Филадельфия, 1994.

[2] Саад, Юсеф и Мартин Х. Шульц, «GMRES: Обобщенный минимальный остаточный алгоритм решения несимметричных линейных систем», SIAM J. Sci. Stat. Comput., июль 1986, том 7, № 3, стр. 856-869.

Расширенные возможности

Представлен до R2006a