Метод минимальных невязок
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,flag] = minres(A,b,...)
[x,flag,relres] = minres(A,b,...)
[x,flag,relres,iter] = minres(A,b,...)
[x,flag,relres,iter,resvec] = minres(A,b,...)
[x,flag,relres,iter,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,...)
также возвращает флаг сходимости.
Флаг | Сходимость |
---|---|
0 |
|
1 |
|
2 | Предварительный формирователь |
3 |
|
4 | Один из скаляров, вычисленных во время |
Каждый раз, когда 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., М. Берри, Т. Ф. Чан, и др., Шаблоны для Решения Линейных систем: Стандартные блоки для Итерационных методов, SIAM, Филадельфия, 1994.
[2] Пэйдж, C. C. и М. А. Сондерс, “Решение Разреженных Неопределенных Систем Линейных уравнений”. SIAM J. Numer. Анальный., Vol.12, 1975, стр 617-629.