Метод минимальных невязок
x = minres (A, b)
minres (A, b, tol)
minres (A, b, tol, maxit)
minres (A, b, tol, maxit, M)
minres (A, b, tol, maxit, M1, M2)
minres (A, b, tol, maxit, M1, M2, x0)
[x, флаг] = minres (A, b...)
[x, флаг, relres] = minres (A, b...)
[x, флаг, relres, проход] = minres (A, b...)
[x, флаг, relres, проход, resvec] = minres (A, b...)
[x, флаг, relres, проход, resvec, resveccg] = minres (A, b...)
x = minres(A,b)
пытается найти минимальное решение для невязки нормы x
к системе линейных уравнений A*x=b
. n
-by-n
матрица коэффициентов A
должен быть симметричным, но не должен быть положителен определенный. Это должно быть большим и разреженным. Вектор - столбец b
должен иметь длину n
. Можно задать A
как указатель на функцию, afun
, такой, что afun(x)
возвращает A*x
.
Параметризация Функций объясняет, как предоставить дополнительные параметры функциональному afun
, а также функцию перед формирователем mfun
, описанный ниже, при необходимости.
Если minres
сходится, сообщение к тому эффекту отображено. Если minres
не удается сходиться после максимального количества итераций или остановов по любой причине, предупреждающее сообщение распечатано, отобразив относительный остаточный norm(b-A*x)/norm(b)
и номер итерации в который метод, остановленный или не пройдено.
minres(A,b,tol)
задает допуск метода. Если tol
является []
, то minres
использует значение по умолчанию, 1e-6
.
minres(A,b,tol,maxit)
задает максимальное количество итераций. Если maxit
является []
, то minres
использует значение по умолчанию, min(n,20)
.
minres(A,b,tol,maxit,M)
и minres(A,b,tol,maxit,M1,M2)
используют симметричный положительный определенный предварительный формирователь M
или M = M1*M2
и эффективно решают систему inv(sqrt(M))*A*inv(sqrt(M))*y = inv(sqrt(M))*b
для y
и затем возвращают x = inv(sqrt(M))*y
. Если M
является []
затем, minres
не применяет предварительного формирователя. M
может быть указателем на функцию mfun
, такой, что mfun(x)
возвращает M\x
.
minres(A,b,tol,maxit,M1,M2,x0)
задает исходное предположение. Если x0
является []
, то minres
использует значение по умолчанию, все-нулевой вектор.
[x,flag] = minres(A,b,...)
также возвращает флаг сходимости.
Флаг | Сходимость |
---|---|
|
|
|
|
| Предварительный формирователь |
|
|
| Один из скаляров, вычисленных во время |
Каждый раз, когда flag
не является 0
, решение, возвращенный x
то, что с минимальной невязкой нормы, вычисленной по всем итерациям. Никакие сообщения не отображены, если flag
вывод задан.
[x,flag,relres] = minres(A,b,...)
также возвращает относительный остаточный norm(b-A*x)/norm(b)
. Если flag
является 0
, relres <= tol
.
[x,flag,relres,iter] = minres(A,b,...)
также возвращает номер итерации, в котором x
был вычислен, где 0 <= iter <= maxit
.
[x,flag,relres,iter,resvec] = minres(A,b,...)
также возвращает вектор оценок норм невязки minres
в каждой итерации, включая norm(b-A*x0)
.
[x,flag,relres,iter,resvec,resveccg] = minres(A,b,...)
также возвращает вектор оценок норм невязки Методов сопряженных градиентов в каждой итерации.
n = 100; on = ones(n,1); A = spdiags([-2*on 4*on -2*on],-1:1,n,n); b = sum(A,2); tol = 1e-10; maxit = 50; M1 = spdiags(4*on,0,n,n); x = minres(A,b,tol,maxit,M1); minres converged at iteration 49 to a solution with relative residual 4.7e-014
Этот пример заменяет матричный A
в предыдущем примере с указателем на функцию матричного векторного произведения afun
. Пример содержится в файле run_minres
это
Вызовы minres
с указателем на функцию @afun
в качестве его первого аргумента.
Содержит afun
как вложенную функцию, так, чтобы все переменные в run_minres
были доступны afun
.
Следующее показывает код для run_minres
:
function x1 = run_minres n = 100; on = ones(n,1); A = spdiags([-2*on 4*on -2*on],-1:1,n,n); b = sum(A,2); tol = 1e-10; maxit = 50; M = spdiags(4*on,0,n,n); x1 = minres(@afun,b,tol,maxit,M); function y = afun(x) y = 4 * x; y(2:n) = y(2:n) - 2 * x(1:n-1); y(1:n-1) = y(1:n-1) - 2 * x(2:n); end end
Когда вы входите
x1=run_minres;
MATLAB отображает сообщение
minres converged at iteration 49 to a solution with relative residual 4.7e-014
Используйте симметричную неопределенную матрицу, которая перестала работать с pcg
.
A = diag([20:-1:1, -1:-1:-20]); b = sum(A,2); % The true solution is the vector of all ones. x = pcg(A,b); % Errors out at the first iteration.
отображения следующее сообщение:
pcg stopped at iteration 1 without converging to the desired tolerance 1e-006 because a scalar quantity became too small or too large to continue computing. The iterate returned (number 0) has relative residual 1
Однако minres
может обработать неопределенный матричный A
.
x = minres(A,b,1e-6,40); minres converged at iteration 39 to a solution with relative residual 1.3e-007
[1] Барретт, Ягода R., M., Т. F. Чан, и др., Шаблоны для Решения Линейных систем: Стандартные блоки для Итеративных Методов, SIAM, Филадельфия, 1994.
[2] Пэйдж, C. C. и М. A. Сондерс, “Решение Разреженных Неопределенных Систем Линейных уравнений”. SIAM J. Numer. Анальный., Vol.12, 1975, стр 617-629.