Московский физико-технический институт
Опубликован: 25.10.2007 | Доступ: свободный | Студентов: 3791 / 1086 | Оценка: 4.50 / 4.33 | Длительность: 24:00:00
ISBN: 978-5-9556-0065-9
Специальности: Программист, Математик
Лекция 3:

Численное решение систем линейных алгебраических уравнений

2.6.2. Методы градиентного и наискорейшего спуска

Метод градиентного спуска состоит в нахождении следующего приближения в итерационном процессе из предыдущего, путем смещения в направлении градиента функционала

{\Phi(\mathbf{u}) = ({\mathbf{Au,u}}) - 2({\mathbf{f,u}})} ( 2.25)
{\mathbf{u}}_{k + 1} = {\mathbf{u}}_k - \alpha_k \cdot 
grad \Phi ({\mathbf{u}}_k), ( 2.26)

где \mathbf{A} — положительно определенная симметричная матрица; {\alpha}_k — параметр, определяемый из заданных условий; например, из условия минимума величины

\Phi \left[{{\mathbf{u}}_k - \alpha_k \cdot grad \Phi ({\mathbf{u}}_k)}\right].

В этом случае итерационный метод называется методом наискорейшего спуска. Так как grad \Phi (\mathbf{u}) = 2(\mathbf{Au}- \mathbf{f}), то (2.26) приобретает вид

{\mathbf{u}}_{k + 1} = {\mathbf{u}}_k - \tau_k 
(\mathbf{Au}_k - \mathbf{f}),\quad \mbox{где}\quad {\tau_k= 2\alpha_k}, ( 2.27)

что соответствует записи итерационного метода в форме {2.17). Здесь \tau _{k} является итерационным параметром, который в методе наискорейшего спуска определяется из условия минимума функции \Phi (\tau_k, {\mathbf{u}}_{k + 1}) по \tau _{k}. Найдем условие этого минимума:

0 = 2(\mathbf{Au}_{k + 1} - \mathbf{f}, {({\mathbf{u}}_{k + 1})^{\prime}}_{\tau_k}) = 
  - 2(\mathbf{Au}_{k + 1}- \mathbf{f}, \mathbf{Au}_k  - \mathbf{f}).

Здесь учтено соотношение: ({\mathbf{Au^{\prime}}},\mathbf{u}) = 
({\mathbf{u^{\prime}}},\mathbf{A}^*\mathbf{u}) =  (\mathbf{Au}{\mathbf{,u^{\prime}}}), поскольку \mathbf{A} = 
\mathbf{A}^* и (\mathbf{v,Aw}) = (\mathbf{Aw,v}) в силу самосопряженности оператора \mathbf{A}. Подставим в последние равенства {\mathbf{u}}_{k+1} из (2.27), получим (\mathbf{Au}_k 
- \mathbf{f}- \tau_k\mathbf{A}(\mathbf{Au}_k - \mathbf{f}),\mathbf{Au}_k - \mathbf{f}) = 0, откуда следует

\mathbf{Au}_k - \mathbf{f},\mathbf{Au}_k - \mathbf{f}) - \tau_k(\mathbf{A}(\mathbf{Au}_k - \mathbf{f}), \mathbf{Au}_k - \mathbf{f}) = 0,

\tau_k = (\mathbf{Au}_k - \mathbf{f},\mathbf{Au}_k - 
\mathbf{f})/(\mathbf{A}(\mathbf{Au}_k - \mathbf{f}),\mathbf{Au}_k - \mathbf{f}), или

$ \tau_k = \frac{({\mathbf{r}}_k,{\mathbf{r}}_k)}{({\mathbf{Ar}}_k,{\mathbf{r}}_k)}
, где {\mathbf{r}}_k = \mathbf{Au}_k - \mathbf{f} $.

Вектор {\mathbf{r}}_k называют вектором невязки.

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

Этот итерационный метод определяется следующим образом. Пусть {\mathbf{u}}_{k+ 1} = {\mathbf{u}}_k - \tau_k{\mathbf{r}}_k, как и ранее, {\mathbf{r}}_k = \mathbf{Au}_k - \mathbf{f}. Итерационный параметр \tau _{k} на каждой итерации выбирается так, чтобы минимизировать евклидову норму невязки {\mathbf{r}_{k+1}}. Заметим, что итерационный процесс {\mathbf{u}}_{n + 1} = {\mathbf{u}}_n + \tau_n{\mathbf{r}}_{n} может быть представлен в равносильном виде в терминах невязки {\mathbf{r}}_{n + 1} = {\mathbf{r}}_{n} + \tau_n{\mathbf{Ar}}_n. Тогда для квадрата евклидовой (третьей) нормы невязки получаем условие

({\mathbf{r}}_{{k+ 1}},{\mathbf{r}}_{{k+ 1}}) = ({\mathbf{r}}_k,{\mathbf{r}}_k) - 2\tau_k({\mathbf{Ar}}_k,{\mathbf{r}}_k) + \tau_k^2 ({\mathbf{Ar}}_k,{\mathbf{Ar}}_k).

Для отыскания минимума невязки на следующей итерации приравняем нулю производную последнего выражения по итерационному параметру \tau _{k}. Получим равенство

- 2({\mathbf{Ar}}_k,{\mathbf{r}}_k) + 
 2\tau_k({\mathbf{Ar}}_k,{\mathbf{Ar}}_k) = 0.

Из последнего соотношения находим значение итерационного параметра

$ \tau_k= \frac{({\mathbf{Ar}}_k,{\mathbf{r}}_k)}{({\mathbf{Ar}}_k,{\mathbf{Ar}}_k)}. $

2.6.4. Метод сопряженных градиентов

Этот метод применяется для решения систем уравнений с самосопряженной положительной матрицей \mathbf{A} = \mathbf{A}^* > 0. Оптимизируем градиентный метод, выбирая параметры \tau таким образом, чтобы на последующем шаге невязка была ортогональна всем предыдущим. На первом шаге невязку ищем аналогично методу наискорейшего спуска. Получим невязки, образующие ортогональный базис. На последнем шаге невязка становится равна нулю, так как пространство конечномерно, и единственный элемент, ортогональный всем базисным векторам конечномерного пространства — нулевой. Получаем точное решение за конечное число шагов ( прямой метод ). Однако этот метод работает не всегда, так как при плохой обусловленности матрицы он становится вычислительно неустойчивым.

Идея метода состоит в следующем. Выбираем произвольное начальное приближение и вычисляем по нему вектор невязки {\mathbf{r}}^0  = \mathbf{Au}^0  - \mathbf{f}, тогда первое приближение \mathbf{u}^1  = \mathbf{u}^0  + \tau_0{\mathbf{r}}^0 .

Из условия ортогональности невязок на двух первых шагах находим значение итерационного параметра

$ \tau_0  =  - \frac{({\mathbf{r}}^0,{\mathbf{r}}^0 )}{({\mathbf{Ar}}^0 ,{\mathbf{r}}^0 )} $.

Построим такое приближение, чтобы учитывались две предыдущие — трехслойный итерационный метод. Фактически, при построении его применяется процесс ортогонализации Грамма-Шмидта. Если \left({{\mathbf{Ar}}^{n - 2},{\mathbf{r}}^{n - 1}}\right) = 0, то {\mathbf{r}}^{n - 2},{\mathbf{r}}^{n - 1}\mathbf{A} - сопряженные невязки.

Имеем метод сопряженных градиентов.

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

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

\begin{gather*}
{{\mathbf{u}}_1 = (\mathbf{E} - {\tau}_1\mathbf{A}){{\mathbf{u}}_0 + {\tau}_1
\mathbf{f}}}, \\ 
\ldots \\ 
{\mathbf{u}}_{k + 1}= \alpha_{k + 1}({\mathbf{E}}- \tau_{k + 1}\mathbf{A}){\mathbf{u}}_k + (1 - \alpha_{k + 1}){\mathbf{u}}_{k - 1}+ \alpha_{k + 1}\tau_{k + 1}\mathbf{f},
\end{gather*} ( 2.28)

где

$ \tau_{k + 1} = \frac{({\mathbf{r}}_k,{\mathbf{r}}_k)}{(\mathbf{A}{\mathbf{r}}_k,{\mathbf{r}}_k)}, $
$ \alpha_1  = 1; \alpha_{k+ 1}= {\left[{1 - \frac{1}{\alpha_k} \cdot \frac{\tau_{k+ 1}}{\tau_k} \cdot \frac{({\mathbf{r}}_k,{\mathbf{r}}_k)}{({\mathbf{r}}_{k- 1},{\mathbf{r}}_{k- 1})}}\right]}^{- 1},\quad k= 1, 2, \ldots $

В вычислительной практике этот метод используется при умеренном числе обусловленности, больших n и неизвестных границах спектра матрицы \mathbf{A}, как итерационный метод, поскольку k0 обычно достаточно большое число. Подробнее о методах сопряженных градиентов можно прочитать в [2.2].