minres

Метод минимальных невязок

Синтаксис

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 матрица коэффициентов 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

minres сходившийся к желаемому допуску tol в maxit итерации.

1

minres выполненный с помощью итераций maxit времена, но не сходились.

2

Предварительный формирователь M было плохо обусловлено.

3

minres застоявшийся. (Два последовательных выполняют итерации, было то же самое.)

4

Один из скаляров вычисляется во время minres стал слишком маленьким или слишком большим, чтобы продолжить вычислять.

Каждый раз, когда 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,...) также возвращает вектор оценок норм невязки Методов сопряженных градиентов в каждой итерации.

Примеры

Используя 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; 
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

Используя minres с Указателем на функцию

Этот пример заменяет матричный 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

Используя minres вместо pcg

Используйте симметричную неопределенную матрицу, которая перестала работать с 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.

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

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