Задача квадратичной оптимизации - 6 - Метод сопряженных градиентов

алгоритм

Это 20-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.

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

описание проблемы

Чтобы переформулировать проблему, нам нужно оптимизировать:

f(x)=12xTAxbTx+c\label1(1)f({\bf{x} }) = \frac{1}{2}{\bf{x^TAx} } - { {\bf{b} }^{\bf{T} } }{\bf{x} } + {\bf{c} } \tag{1} \label{1}
  • матрицаA\bf{A}положительно определенная симметрия
  • Цель состоит в том, чтобы оптимизироватьx\bf{x}, так чтоf(x)f(\bf{x})получить минимальное значение

Задача с методом наискорейшего спуска

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

ярмо

Ярмо — это китайский иероглиф, произносимый как è, который изначально относится к изогнутому дереву, которое помещается на шею животного во время движения, а расширенное значение — сдержанность и контроль. Этот текст был записан в таких документах, как «И Ли Цзи Си Ли» и «Сюнь Цзы Чжэн Лунь». --Энциклопедия Baidu

  • В математике много содержания, связанного с сопряжением, здесь сопряжение означает, что они связаны друг с другом и могут взаимодействовать при определенных условиях.

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

  • Для того, чтобы решить задачу о методе наискорейшего спуска туда и обратно, люди стали задумываться над тем, можно ли его непосредственно оптимизировать по определению квадратичной функции, которую нужно оптимизировать, и можно ли получить реальное оптимальное решение через конечно-шаговый расчет.
  • Затем, предполагая, что мы используем точную модель для проблемы, а не приблизительную локальную оптимальную модель, если мы можем вычислить координаты каждого измерения оптимального решения в N-мерном пространстве, мы можем достичь вышеуказанной цели.
  • Итак, как спроектировать это пространство, как пошагово рассчитать и интегрировать в реальные результаты — вот задача, которую должен решить метод сопряженных градиентов.
  • Основная идея этого метода состоит в том, чтобы установить набор оснований, которые линейно независимы в N-мерном пространстве. Теоретически, линейная комбинация этого набора оснований может представлять любую точку в пространстве. Метод сопряженных градиентов может точно решить положение цели в пространстве с помощью нескольких вычислений.Каждый компонент коэффициента в этой группе базисных пространств достигает цели решения оптимального значения
  • Этот метод и метод наискорейшего спуска отличаются от точного моделирования тем, что с точки зрения Бога каждый итерационный расчет доводит до предела значение компонента, который необходимо настроить в этом направлении, то есть последующий расчет не требует рассмотрим составляющую движения в этом направлении.Теперь это процесс точного решения задачи,а не процесс аппроксимации перехода к оптимальному значению путем простого пошагового моделирования

Определение сопряженной группы

ПредполагатьA\bf{A}заnnпорядок вещественной симметричной положительно определенной матрицы, если имеется дваnnВиллевекторs1\bf{s}_1иs2\bf{s}_2удовлетворить

{% raw %}

s1TAs2=0\label2(2){\bf{s}}_1^T{\bf{A}}{{\bf{s}}_2} = 0 \tag{2} \label{2}

{% endraw %}

векторs1\bf{s}_1иs2\bf{s}_2для матрицыA\bf{A}Сопрягать. еслиA\bf{A}— единичная матрица, то формула\eqref2\eqref{2}стать\bf{s}_1$$\bf{s}_2, так что скалярное произведение двух векторов равно нулю, а два вектора геометрически ортогональны, что является частным случаем сопряжения.

Пусть A — симметричная положительно определенная матрица, если набор ненулевых векторовs1\bf{s}_1,s2\bf{s}_2,…,sn\bf{s}_nудовлетворить {% сырой %}

siTAsj=0(ij)(3){\bf{s}}_i^T{\bf{A}}{{\bf{s}}_j} = 0 (i≠j) \tag{3}

векторная системаsi(1in){{\bf{s}}_i}(1 \le i \le n)речь идет о матрицеA\bf{A}Сопрягать.

какsi(1in){{\bf{s}}_i}(1 \le i \le n)линейно независимы, то мы называем набор векторов какnnо матрицах в размерном пространствеA\bf{A}набор сопряженных групп. {% отрисовать%}

Роль сопряженных групп

  • Предположим, что имеется набор матриц оA\bf{A}сопряженная группаD\bf{D}:
D={d1,d2,...,dn}(4)\bf{D}=\{ {\bf{d}_1},{\bf{d}_2},...,{\bf{d}_n}\} \tag{4}
  • Пусть квадратичная функция\eqref1\eqref{1}Экстремальное значениеx*\bf{x}^*,использоватьD\bf{D}Это выглядит как:

{% raw %}

x*=λ1d1+λ2d2++λndn(5){ {\bf{x} }^*} = {\lambda _1}{ {\bf{d} }_1} + {\lambda _2}{ {\bf{d} }_2} + \cdots + {\lambda _n}{ {\bf{d} }_n} \tag{5}

{% endraw %}

  • Поскольку производная от экстремального значения функции равна 0 во всех направлениях:

{% raw %}

f'(x*)=Ax*b=0Ax*=b(6)\begin{array}{l} f'({{\bf{x}}^*}) = {\bf{A}}{{\bf{x}}^*} - {\bf{b}} = 0\\ \Rightarrow {\bf{A}}{{\bf{x}}^*} = {\bf{b}} \end{array} \tag{6}

{% endraw %}

  • {%raw %} мы вычисляемdiTAx*{\bf{d}}_i^T{\bf{A}}{{\bf{x}}^*}, по взаимному сопряжению между разными сопряженными группами: {% endraw %}

{% raw %}

diTAx*=diTA(λ0d0++λn1dn1)=λidiTAdi+0(7)\begin{array}{l} {\bf{d}}_i^T{\bf{A}}{{\bf{x}}^*} &= {\bf{d}}_i^T{\bf{A}}\left( {{\lambda _0}{{\bf{d}}_0} + \ldots + {\lambda _{n - 1}}{{\bf{d}}_{n - 1}}} \right)\\ &= {\lambda _i}{\bf{d}}_i^T{\bf{A}}{{\bf{d}}_i} + 0\\ \tag{7} \end{array}

{% endraw %}

  • получить:

{% raw %}

λi=diTAx*diTAdi=diTbdiTAdi\label8(8){\lambda _i} = \frac{{{\bf{d}}_i^T{\bf{A}}{{\bf{x}}^*}}}{{{\bf{d}}_i^T{\bf{A}}{{\bf{d}}_i}}} = \frac{{{\bf{d}}_i^T{\bf{b}}}}{{{\bf{d}}_i^T{\bf{A}}{{\bf{d}}_i}}} \tag{8} \label{8}

{% endraw %}

  • заλi{\lambda _i}Решение для , мы знаем, что переменныеb\bf{b}иA\bf{A}, если мы получили пространство оA\bf{A}Сопряженный базис (любой набор) мы можем решить непосредственноλi{\lambda _i}
  • Это захватывающий вывод, поэтому в настоящее время мы сосредоточимся на том, как быстро получить наборA\bf{A}сопряженная группа

Получить сопряженное основание по определению

  • С определением нетрудно придумать метод насильственного получения сопряженного основания:
конец цикла
петля не закончилась
Случайным образом сгенерируйте n n-мерных векторов
i=1-n цикл
Исключить компоненты вектора j=1-i
собирать векторы 1-n
получить вектор я
выходное сопряженное основание
  • С помощью этого метода мы можем получить сопряженное основание, вычисленное в соответствии с определением, внося\eqref8\eqref{8}Без проблем рассчитываются экстремальные значения
  • Но на самом деле это количество операций равно алгебраическому решению {%raw%}Ax=b{\bf{A}}{{\bf{x}}} = {\bf{b}}Процесс {%endraw%} имеет значительную вычислительную сложность и не приносит прироста производительности задаче оптимизации

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

Основные шаги этого алгоритма такие же, как и в методе наискорейшего спуска, а именно нахождение сопряженного направления и вычисление размера шага движения.

Найдите сопряженное направление

Из-за простоты вычисления градиента процесс нахождения сопряженного градиента зависит от вычисления направления градиента.

  • Цель оптимизацииx*\bf{x}^*, начальное положениеx1\bf{x}_1, сопряженное основание, которое необходимо получить, равноD={d1,d2,...,dn}\bf{D}=\{ {\bf{d}_1},{\bf{d}_2},...,{\bf{d}_n}\}
  • Рассчитать начальнуюx1\bf{x}_1Градиент положения, первое сопряженное основание является противоположным направлением градиента:

{% raw %}

d1=g1=(Ax1b)=bAx1(9){{\bf{d}}_1} = - {{\bf{g}}_1} = - ({\bf{A}}{{\bf{x}}_1} - {\bf{b}}) = {\bf{b}} - {\bf{A}}{{\bf{x}}_1} \tag{9}

{% endraw %}

  • первоеiiградиенты для удаленияjjсопряженная группа(j<i)(j<i)Компонент направления, который необходимо вычесть изβj\beta_j Количество:

{% raw %}

djTA(giβjdj)=0djTAgi=βjdjTAdjβj=djTAgidjTAdj\label10(10)\begin{array}{l} {\bf{d}}_j^T{\bf{A}}({{\bf{g}}_i} - \beta_j {{\bf{d}}_j}) = 0\\ {\bf{d}}_j^T{\bf{A}}{{\bf{g}}_i} = \beta_j {\bf{d}}_j^T{\bf{A}}{{\bf{d}}_j}\\ \beta_j = \frac{{{\bf{d}}_j^T{\bf{A}}{{\bf{g}}_i}}}{{{\bf{d}}_j^T{\bf{A}}{{\bf{d}}_j}}} \end{array} \tag{10} \label{10}

{% endraw %}

  • Поэтому первыйkkСопряженные основания:

{% raw %}

dk=gki=1k1diTAgkdiTAdididk=gki=1k1βidi\label11(11)\begin{array}{l} {{\bf{d}}_k} = {{\bf{g}}_k} - \sum\limits_{i = 1}^{k - 1} {\frac{{{\bf{d}}_i^T{\bf{A}}{{\bf{g}}_k}}}{{{\bf{d}}_i^T{\bf{A}}{{\bf{d}}_i}}}{{\bf{d}}_i}} \\ {{\bf{d}}_k}={{\bf{g}}_k} -\sum\limits_{i = 1}^{k - 1}\beta_i{{\bf{d}}_i} \end{array} \tag{11} \label{11}

{% endraw %}

  • В настоящее время, если мы можем определить, насколько перемещается каждая итерацияxi\bf{x}_iположение, получитьgi\bf{g}_i, то по первому в первыйi1i-1сопряженные основания определяют текущийiiсопряженная группа
  • Поэтому наша текущая цель состоит в том, как определить расстояние движения в этом направлении после того, как мы получим сопряженное направление

Определить расстояние

{% raw %} был перемещенxk\bf{x}_kположение, следующее прямое направлениеdk{{\bf{d}}_k}, Движение впередαk{\alpha _k}, ошибкаek=x*xk\bf{e}_{k}=\bf{x}^*-x_{k}, это:

xk+1=xk+αkdk(12){{\bf{x}}_{k + 1}}={{\bf{x}}_k} + {\alpha _k}{{\bf{d}}_k} \tag{12}

{% endraw %}

Вот два вида прогрессаαk{\alpha _k}идеи.

метод первый

определить первыйkkдлина шагаαk{\alpha _k}, то есть коэффициент сопряженного основания, а условия ограничения коэффициента таковы:

  • {% raw %} направление текущей сопряженной группыdk\bf{d}_{k}с вектором ошибкиek+1=x*xk+1\bf{e}_{k+1}=\bf{x}^*-x_{k+1}Сопрягать:
dkT'Aek+1=dkTA(x*xk+1)=dkTA(x*xk+xkxk+1)=dkTA(ekαkdk)=dkTAekαkdkTAdk=0\label13(13)\begin{aligned} \bf{d}_{k}^{T^{\prime}} A e_{k+1} &=\bf{d}_{k}^{T} A\left(x^{*}-x_{k+1}\right) \\ &=\bf{d}_{k}^{T} A\left(x^{*}-x_{k}+x_{k}-x_{k+1}\right) \\ &=\bf{d}_{k}^{T} A\left(e_{k}-\alpha_{k} \bf{d}_{k}\right) \\ &=\bf{d}_{k}^{T} A e_{k}-\alpha_{k} \bf{d}_{k}^{T} A \bf{d}_{k}=0 \end{aligned} \tag{13} \label{13}

{% endraw %}

  • имеют:

{% raw %}

αk=dkTAekdkTAdk=dkTA(x*xk)dkTAdk=dkT(Ax*Axk)dkTAdk=dkT(bAxk)dkTAdk=dkTgkdkTAdk(14)\begin{aligned} \alpha_{k} &=\frac{\bf{d}_{k}^{T} A e_{k}}{\bf{d}_{k}^{T} A \bf{d}_{k}} \\ &=\frac{\bf{d}_{k}^{T} A\left(x^{*}-x_{k}\right)}{\bf{d}_{k}^{T} A \bf{d}_{k}} \\ &=\frac{\bf{d}_{k}^{T}\left(A x^{*}-A x_{k}\right)}{\bf{d}_{k}^{T} A \bf{d}_{k}} \\ &=\frac{\bf{d}_{k}^{T}\left(b-A x_{k}\right)}{\bf{d}_{k}^{T} A \bf{d}_{k}} \\ &=-\frac{\bf{d}_{k}^{T} g_{k}}{\bf{d}_{k}^{T} A \bf{d}_{k}} \end{aligned} \tag{14}

{% endraw %}

Способ второй

{% raw %} параf(xk+1)f({{\bf{x}}_{k + 1}})серединаαk{\alpha _k}Берем производную так, чтобы производная была равна 0, вычисляемαk{\alpha _k}:{% endraw %}

  • {% исходный %} сxk{{\bf{x}}_k}выражатьxk+1{{\bf{x}}_{k+1}}:
f(xk+1)=f(xk+αkdk)=12xk+1TAxk+1bT(xk+αkdk)+c(15)\begin{array}{l} f({{\bf{x}}_{k + 1}}) &= f({{\bf{x}}_k} + {\alpha _k}{{\bf{d}}_k})\\ &= \frac{1}{2}{\bf{x}}_{k + 1}^T{\bf{A}}{{\bf{x}}_{k + 1}} - {{\bf{b}}^T}({{\bf{x}}_k} + {\alpha _k}{{\bf{d}}_k}) + c \end{array} \tag{15}

{% endraw %}

  • {% raw %} параf(xk+1)f({{\bf{x}}_{k + 1}})серединаαk{\alpha _k}Руководство:
f'(xk+1αk)=f(xk+1)xk+1xk+1αk=(Axk+1b)Tdk=(Axk+αkAdkb)Tdk=(αkAdk+gk)Tdk=αkdkTAdk+gkTdk(16)\begin{array}{l} f'({{\bf{x}}_{k + 1}}|{\alpha _k}) &= \frac{{\partial f({{\bf{x}}_{k + 1}})}}{{\partial {{\bf{x}}_{k + 1}}}}\frac{{\partial {{\bf{x}}_{k + 1}}}}{{\partial {\alpha _k}}}\\ &= {({\bf{A}}{{\bf{x}}_{k + 1}} - {\bf{b}})^T}{{\bf{d}}_k}\\ &= {({\bf{A}}{{\bf{x}}_k} + {\alpha _k}{\bf{A}}{{\bf{d}}_k} - {\bf{b}})^T}{{\bf{d}}_k}\\ &= {({\alpha _k}{\bf{A}}{{\bf{d}}_k} + {{\bf{g}}_k})^T}{{\bf{d}}_k}\\ &= {\alpha _k}{\bf{d}}_k^TA{{\bf{d}}_k} + {\bf{g}}_k^T{{\bf{d}}_k} \end{array} \tag{16}

{% endraw %}

  • {% raw %} делает производную нулевой, при этом:
αkdkTAdk+gkTdk=0αk=gkTdkdkTAdk=dkTgkdkTAdk(17)\begin{array}{l} {\alpha _k}{\bf{d}}_k^TA{{\bf{d}}_k} + {\bf{g}}_k^T{{\bf{d}}_k} = 0\\ {\alpha _k} = - \frac{{{\bf{g}}_k^T{{\bf{d}}_k}}}{{{\bf{d}}_k^TA{{\bf{d}}_k}}} = - \frac{{{\bf{d}}_k^T{{\bf{g}}_k}}}{{{\bf{d}}_k^TA{{\bf{d}}_k}}} \end{array} \tag{17}

{% endraw %}

На данный момент мы рассчитали ряд методов для вычисления сопряженных градиентов, и мы можем по очереди получить набор сопряженных оснований, но некоторые из шагов можно еще продолжить для упрощения вычисления.

Упрощенные расчеты и некоторые выводы

Следствие одно
  • {% сырой %}kkшаг вычисляемого градиентаgk\bf{g}_kи доk1k-1Сопряженный вектор шаговd1,d1,...,dk1{\bf{d}_1,\bf{d}_1,...,\bf{d}_{k-1}}Ортогональный: {% enddraw %}
  • {% raw %} доказывает, что когдаi<ji < jВремя:
diTgj=diT(Axjb)=diT(AxjAx*)=diT(Ax*xi+1+xi+1xj)=diTA(ei+1k=i+1j1αkdk)=diTAei+1+k=i+1j1αkdiTAdk\label18(18)\begin{array}{l} \bf{d}_i^T{g_j} &= \bf{d}_i^T(A{x_j} - b)\\ &= \bf{d}_i^T(A{x_j} - A{x^*})\\ &= - \bf{d}_i^T(A{x^*} - {x_{i + 1}} + {x_{i + 1}} - {x_j})\\ &= - \bf{d}_i^TA({e_{i + 1}} - \sum\limits_{k = i + 1}^{j - 1} {{\alpha _k}{d_k})} \\ &= - \bf{d}_i^TA{e_{i + 1}} + \sum\limits_{k = i + 1}^{j - 1} {{\alpha _k}d_i^TA{d_k}} \end{array} \tag{18} \label{18}

{% endraw %}

  • Режим\eqref18\eqref{18}ушел из-заdi\bf{d}_iпроцесс расчета\eqref13\eqref{13}равно 0, в правой части, поскольку попарно сопряженные значения разных сопряженных векторов равны 0, конечное значение также равно 0
  • {% raw %} таким образом доказывает, что:kkшаг вычисляемого градиентаgk \bf{g}_kи доk1k-1Сопряженный вектор шаговd1,d1,...,dk1 { \bf{d}_1,\bf{d}_1,...,\bf{d}_{k-1}}Ортогональный. {% отрисовать%}
Следствие два
  • {% сырой %}kkшаг вычисляемого градиентаgk\bf{g}_kи доk1k-1ступенчатый градиентg1,g1,...,gk1{\bf{g}_1,\bf{g}_1,...,\bf{g}_{k-1}}Ортогональный: {% enddraw %}

  • {% raw %} доказывает, что когдаi<ji < jКогда: {% выводить %}

  • Зависит от\eqref11\eqref{11}придется:

{% raw %}

gi=di+k=1i1βkdk(19){{\bf{g}}_i}={{\bf{d}}_i} +\sum\limits_{k = 1}^{i - 1}\beta_k{{\bf{d}}_k} \tag{19}

{% endraw %}

  • имеют:

{% raw %}

giTgj=(di+k=1i1βkdk)Tgj=k=1iβkdkTgj(βi=1)\label20(20)\begin{array}{l} {\bf{g}}_i^T{{\bf{g}}_j} &= {({{\bf{d}}_i} + \sum\limits_{k = 1}^{i - 1} {{\beta _k}} {{\bf{d}}_k})^T}{{\bf{g}}_j}\\ &= \sum\limits_{k = 1}^i {{\beta _k}} {{\bf{d}}_k}^T{{\bf{g}}_j} \qquad ({\beta _i} = 1) \tag{20} \label{20} \end{array}

{% endraw %}

  • в соответствии сСледствие одно,Режим\eqref20\eqref{20}значение равно 0
  • {%raw %} подтверждает вывод: первоеkkшаг вычисляемого градиентаgk\bf{g}_kи доk1k-1ступенчатый градиентg1,g1,...,gk1{\bf{g}_1,\bf{g}_1,...,\bf{g}_{k-1}}Ортогональный. {% отрисовать%}
  • {% raw %} затем для двух разных градиентовgi,gj(ij)\bf{g}_i, \bf{g}_j(i \ne j), то два должны быть разделены на передний и задний, чтобы градиенты были ортогональны друг другу, то естьG={g1,g2,...,gn}{\bf{G}} = \{ {{\bf{g}}_{1,}}{{\bf{g}}_2},...,{{\bf{g}}_n}\} составилnnНабор ортонормированных базисов в размерном пространстве {% endraw %}
Следствие три
  • Расчет {% необработанных %}gj+1Tgi{\bf{g}}_{j + 1}^T{{\bf{g}}_i}:
gj+1Tgi=(Axj+1b)Tgi=(A(xj+αjdj)b)Tgi=(Axjb+αjAdj)Tgi=(gj+αjAdj)Tgi=gjTgi+αjdjTAgidjTAgi=1αj(gj+1TgigjTgi)\label21(21)\begin{array}{l} {\bf{g}}_{j + 1}^T{{\bf{g}}_i} &= {({\bf{A}}{{\bf{x}}_{j + 1}} - {\bf{b}})^T}{{\bf{g}}_i}\\ &= {({\bf{A}}({{\bf{x}}_j} + {\alpha _j}{{\bf{d}}_j}) - {\bf{b}})^T}{{\bf{g}}_i}\\ &= {({\bf{A}}{{\bf{x}}_j} - {\bf{b}} + {\alpha _j}{\bf{A}}{{\bf{d}}_j})^T}{{\bf{g}}_i}\\ & = {({{\bf{g}}_j} + {\alpha _j}{\bf{A}}{{\bf{d}}_j})^T}{{\bf{g}}_i}\\ &= {\bf{g}}_j^T{{\bf{g}}_i} + {\alpha _j}{\bf{d}}_j^TA{{\bf{g}}_i}\\ {\bf{d}}_j^TA{{\bf{g}}_i}& = \frac{1}{{{\alpha _j}}}({\bf{g}}_{j + 1}^T{{\bf{g}}_i} - {\bf{g}}_j^T{{\bf{g}}_i}) \end{array} \tag{21} \label{21}

{% endraw %}

  • По формуле\eqref21\eqref{21}иСледствие два, {% raw %} из-за общего случаяαj\alpha _jне 0, поэтому гарантируется для всех случаев\eqref20\eqref{20}установлено, необходимоiji \ne jиij+1i \ne j+1час,djTAgi=0{\bf{d}}_j^TA{{\bf{g}}_i}=0 {% endraw %}
  • Это означает, что текущее направление градиента сопряжено ортогонально всем сопряженным направлениям до и после текущего.
Упрощенные расчеты
  • Для формулы\eqref11\eqref{11}, при решенииdk\bf{d}_kКоэффициенты, полученные в процессеβ\beta, здесь подчеркнуто\eqref10\eqref{10}:

{% raw %}

βi=diTAgkdiTAdi{\beta _i} = \frac{{{\bf{d}}_i^T{\bf{A}}{{\bf{g}}_k}}}{{{\bf{d}}_i^T{\bf{A}}{{\bf{d}}_i}}}

{% endraw %}

  • Зависит отСледствие три{%сырой%},\eqref10\eqref{10}Чжунданiki\ne kиik1i \ne k-1час,diTAgk{{\bf{d}}_i^T{\bf{A}}{{\bf{g}}_k}}Значение равно 0 {% выводить %}
  • {% raw %} таким образом\eqref11\eqref{11}можно упростить до:
dk=gki=1k1βidi=gkβk1dk1\label22(22)\begin{array}{l} {{\bf{d}}_k} &= {{\bf{g}}_k} - \sum\limits_{i = 1}^{k - 1} {{\beta _i}} {{\bf{d}}_i}\\ &= {{\bf{g}}_k} - {{\beta _{k-1}}} {{\bf{d}}_{k-1}} \end{array} \tag{22} \label{22}

{% endraw %}

  • то есть решитьkkКогда есть сопряженные основания, только текущий градиентgk\bf{g}_kминус первыйk1k-1Сопряженные компоненты сопряженного основания могут быть
Следствие четвертое
  • в соответствии сУпрощенные расчетыформула\eqref22\eqref{22},имеют:

{% raw %}

dk=gkβk1dk1=gkβk1(gk1βk2dk2)=gk+γk1gk1+γk2gk2+γ1g1=i=1kγigi(23)\begin{array}{l} {{\bf{d}}_k} &= {{\bf{g}}_k} - {\beta _{k - 1}}{{\bf{d}}_{k - 1}}\\ &= {{\bf{g}}_k} - {\beta _{k - 1}}({{\bf{g}}_{k - 1}} - {\beta _{k - 2}}{{\bf{d}}_{k - 2}})\\ &= {{\bf{g}}_k} + {\gamma _{k - 1}}{{\bf{g}}_{k - 1}} + {\gamma _{k - 2}}{{\bf{g}}_{k - 2}} + \cdots {\gamma _1}{{\bf{g}}_1}\\ &= \sum\limits_{i = 1}^k {{\gamma _i}{{\bf{g}}_i}} \end{array} \tag{23}

{% endraw %}

  • где фиксированные постоянные коэффициентыγ\gammaвыражать
  • Тогда есть:

{% raw %}

giTdj=giTk=1jγkgk=k=1jγkgiTgk\label24(24)\begin{array}{l} {\bf{g}}_i^T{{\bf{d}}_j} &= {\bf{g}}_i^T\sum\limits_{k = 1}^j {{\gamma _k}{{\bf{g}}_k}} \\ & = \sum\limits_{k = 1}^j {{\gamma _k}{\bf{g}}_i^T{{\bf{g}}_k}} \end{array} \tag{24} \label{24}

{% endraw %}

  • Режим\eqref24\eqref{24}в соответствии сСледствие дваВывод таков:

{% raw %}

{\bf{g}}_i^T{{\bf{d}}_j} = \left\{ {\begin{array}{*{20}{c}} {0,i > j}\\ {\gamma_i{\bf{g}}_i^T{{\bf{g}}_i},i \le j} \end{array}} \right. \tag{25}

{% endraw %}

  • То есть проекция градиента на все сопряженные основания равна 0 или константе (не является практическим выводом для этого метода).

Практические шаги метода сопряженных градиентов

  • Начальные условия: известныA,b\bf{A}, \bf{b},начальное положениеx1\bf{x}_1
  • {% raw %}g1=Ax1b\bf{g}_1=\bf{A}\bf{x}_1-\bf{b} {% endraw %}
  • {% raw %}d1=g1{{\bf{d}}_1} = - {{\bf{g}}_{\bf{1}}} {% endraw %}
  • k=1k=1
  • whilekn:while \quad k \le n:
    • {% raw %}αk=dkTgkdkTAdk\alpha_{k} = - \frac{{{\bf{d}}_k^T{{\bf{g}}_k}}}{{{\bf{d}}_k^TA{{\bf{d}}_k}}} {% endraw %}
    • {% raw %}xk+1=xk+αkdk\bf{x}_{k+1}=\bf{x}_k+\alpha_{k}{\bf{d}}_k {% endraw %}
    • {% raw %}gk+1=Axk+1b\bf{g}_{k+1}=\bf{A}\bf{x}_{k+1}-\bf{b} {% endraw %}
    • {% raw %}βk=dkTAgk+1dkTAdk{\beta _k} = \frac{{{\bf{d}}_k^T{\bf{A}}{{\bf{g}}_{k+1}}}}{{{\bf{d}}_k^T{\bf{A}}{{\bf{d}}_k}}} {% endraw %}
    • {% raw %}dk+1=gk+1βkdk{{\bf{d}}_{k+1}}={{\bf{g}}_{k+1}} - {{\beta _{k}}} {{\bf{d}}_{k}} {% endraw %}
    • k=k+1k=k+1
  • returnxn+1return \quad \bf{x}_{n+1}

использованная литература