Русская Википедия:Метод сопряжённых градиентов (для решения СЛАУ)

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Другие значения

Файл:Conjugate gradient illustration.svg
Сравнение методов градиентного спуска(зеленый) и метода сопряженных градиентов для <math>n=2</math>

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

Постановка задачи

Пусть дана система линейных уравнений: <math>Ax = b</math>. Причём матрица системы — это действительная матрица, обладающая следующими свойствами: <math>A = A^T > 0</math>, то есть это симметричная положительно определённая матрица. Тогда процесс решения СЛАУ можно представить как минимизацию следующего функционала:

<math>(Ax,x) - 2(b,x) \rightarrow min</math>

За <math>(\cdot, \cdot)</math> обозначено скалярное произведение. Минимизируя данный функционал, используя подпространства Крылова, получаем алгоритм метода сопряженных градиентов.

Алгоритм

Подготовка перед итерационным процессом
  1. Выберем начальное приближение <math>x^0</math>
  2. <math>r^0 = b - Ax^0</math>
  3. <math>z^0 = r^0</math>
<math>k</math>-я итерация метода[1]
  1. <math>\alpha_k = \frac{(r^{k-1}, r^{k-1})}{(Az^{k-1}, z^{k-1})}</math>
  2. <math>x^k = x^{k-1} + \alpha_k z^{k-1}</math>
  3. <math>r^k = r^{k-1} - \alpha_k A z^{k-1}</math>
  4. <math>\beta_k = \frac{(r^k, r^k)}{(r^{k-1}, r^{k-1})}</math>
  5. <math>z^k = r^k + \beta_k z^{k-1}</math>
Критерий остановки

Поскольку минимизируемый функционал квадратичный, то процесс должен дать ответ на <math>n</math>-й итерации, однако при реализации метода на компьютере существует погрешность представления вещественных чисел, в результате чего может потребоваться и больше итераций. Так же оценивать точность можно по относительной невязке <math>\frac{||r^k||}{||b||}</math>, и прекращать итерационный процесс, когда невязка станет меньше заданного числа.

Алгоритм для предобусловленной системы

Пусть предобусловленная система имеет вид: <math> SAQx=Sb </math>, тогда алгоритм метода для такой системы можно записать следующим образом:

Подготовка перед итерационным процессом
  1. Выберем начальное приближение <math>x^0</math>
  2. <math>r^0 = Q(b - SAx^0)</math>
  3. <math>z^0 = r^0</math>
  4. <math>\widetilde{x}^0 = Qx^0</math>
<math>k</math>-я итерация метода
  1. <math>\alpha_k = \frac{(r^{k-1}, r^{k-1})}{(SAQz^{k-1}, z^{k-1})}</math>
  2. <math>\widetilde{x}^k = \widetilde{x}^{k-1} + \alpha_k z^{k-1}</math>
  3. <math>r^k = r^{k-1} - \alpha_k SAQ z^{k-1}</math>
  4. <math>\beta_k = \frac{(r^k, r^k)}{(r^{k-1}, r^{k-1})}</math>
  5. <math>z^k = r^k + \beta_k z^{k-1}</math>
После итерационного процесса
  1. <math>x^* = Q^{-1} \widetilde{x}^m</math>, где <math>x^*</math> — приближенное решение системы, <math>m</math> — общее число итераций метода.
Критерий остановки

В данном случае можно использовать те же критерии остановки, что и для обычной системы, только с учётом предобуславливания. Например относительная невязка станет вычисляться как: <math>\frac{||\widetilde{r}^k||}{||Sb||}</math>, однако можно пользоваться и невязкой исходной системы, которая вычисляется следующим образом: <math>\frac{||r^k||}{||b||} = \frac{||Q^{-1}\widetilde{r}^k||}{||b||}</math>

Особенности и обобщения

Как и все методы на подпространствах Крылова, метод сопряженных градиентов от матрицы требует только возможность умножать её на вектор, что приводит к возможности использовать специальные форматы хранения матрицы(такие, как разреженный) и сэкономить память на хранении матрицы.
Метод часто используется для решения конечноэлементых СЛАУ.
У метода есть обобщения: метод бисопряженных градиентов, для работы с несимметричными матрицами. И комплексный метод сопряженных градиентов, где матрица <math>A</math> может содержать комплексные числа, но должна удовлетворять условию: <math>A = A^* > 0</math>, то есть быть самосопряженной-положительно определённой матрицей.

Примечания

Шаблон:Примечания

Шаблон:Методы решения СЛАУ