<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0+%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0+%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0"/>
	<updated>2026-10-22T22:13:16Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19308</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19308"/>
		<updated>2016-11-27T21:03:34Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3\cdot 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19307</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19307"/>
		<updated>2016-11-27T21:02:28Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
{{assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3\cdot 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19306</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19306"/>
		<updated>2016-11-27T20:55:49Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3\cdot 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19305</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19305"/>
		<updated>2016-11-27T20:55:33Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3\cdot 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19304</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19304"/>
		<updated>2016-11-27T20:55:05Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3\cdot 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19303</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19303"/>
		<updated>2016-11-27T20:54:43Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3 10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19302</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19302"/>
		<updated>2016-11-27T20:54:10Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3 *10^{-7}%&amp;lt;/math&amp;gt;&lt;br /&gt;
* максимальная эффективность реализации: &amp;lt;math&amp;gt;0.0018 %&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19301</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19301"/>
		<updated>2016-11-27T20:52:48Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3 *10^-{7}%&amp;lt;/math&amp;gt;%&lt;br /&gt;
* максимальная эффективность реализации: 0.0018 %&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19299</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19299"/>
		<updated>2016-11-27T20:49:41Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[File:Gmres time akhiyarova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: &amp;lt;math&amp;gt;3 10^-{7}%&amp;lt;/math&amp;gt;%&lt;br /&gt;
* максимальная эффективность реализации: 0.0018 %&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19296</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19296"/>
		<updated>2016-11-27T20:43:55Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:Gmres time akhiyrova.jpg|thumb|center|400px|Рис 1. График зависимости времени выполнения от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 2.&lt;br /&gt;
[[file:Efficiency akhiyarova.jpg|thumb|center|400px|Рис 2. График зависимости эффективности реализации от размера матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: 0.0095%&lt;br /&gt;
* максимальная эффективность реализации: 0.929%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19274</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19274"/>
		<updated>2016-11-27T15:17:24Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода GMRES. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:.png|thumb|center|400px|Рис 2. График зависимости времени выполнения от числа процессоров]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 3.&lt;br /&gt;
[[file:.png|thumb|center|400px|Рис 3. График зависимости эффективности реализации от числа процессоров]]&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: 0.0095%&lt;br /&gt;
* максимальная эффективность реализации: 0.929%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19273</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19273"/>
		<updated>2016-11-27T15:16:59Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода Якоби нахождения сингулярных чисел и векторов. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:.png|thumb|center|400px|Рис 2. График зависимости времени выполнения от числа процессоров]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 3.&lt;br /&gt;
[[file:.png|thumb|center|400px|Рис 3. График зависимости эффективности реализации от числа процессоров]]&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: 0.0095%&lt;br /&gt;
* максимальная эффективность реализации: 0.929%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19272</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19272"/>
		<updated>2016-11-27T15:16:41Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Проведём исследование масштабируемости параллельной реализации метода Якоби нахождения сингулярных чисел и векторов. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
Для этого была использована параллельная реализация, найденная на просторах GitHub&amp;lt;ref&amp;gt;https://github.com/chemeng/GMRES_MPI&amp;lt;/ref&amp;gt;.  Параметрами запуска программы являются размер матрицы &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и число рестартов &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;. Программа запускалась для нескольких значений количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Ниже представлены графики времени и эффективности работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
[[file:PlotLvs1.png|thumb|center|400px|Рис 2. График зависимости времени выполнения от числа процессоров]]&lt;br /&gt;
График эффективности для полученного времени выполнения указан на рисунке 3.&lt;br /&gt;
[[file:PlotLvs2.png|thumb|center|400px|Рис 3. График зависимости эффективности реализации от числа процессоров]]&lt;br /&gt;
&lt;br /&gt;
Параметры компиляции:&lt;br /&gt;
&amp;lt;code&amp;gt;mpiсс main.c -o gmres&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Параметры запуска:&lt;br /&gt;
&amp;lt;code&amp;gt;gmres 100 8 10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
* минимальная эффективность реализации: 0.0095%&lt;br /&gt;
* максимальная эффективность реализации: 0.929%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19110</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19110"/>
		<updated>2016-11-24T12:50:51Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Перечислим основные этапы алгоритма GMRES:&lt;br /&gt;
* Построение базиса подпространства Крылова с помощью процесса Арнольди&lt;br /&gt;
* Решение задачи минимизации  &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы невязки&lt;br /&gt;
* Построение решения исходной системы линейных алгебрических уравнений&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19108</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19108"/>
		<updated>2016-11-24T12:43:03Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма равна &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19100</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19100"/>
		<updated>2016-11-24T12:28:48Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Для алгоритма нахождения скалярного произведения двух векторов граф состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19099</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19099"/>
		<updated>2016-11-24T12:27:48Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4 , n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма нахождения скалярного произведения двух векторов состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19098</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19098"/>
		<updated>2016-11-24T12:25:34Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4&amp;lt;/math&amp;gt;, и &amp;lt;math&amp;gt; n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма нахождения скалярного произведения двух векторов состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b, \quad c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19097</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19097"/>
		<updated>2016-11-24T12:24:35Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4, n = 5&amp;lt;/math&amp;gt;.  Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма нахождения скалярного произведения двух векторов состоит из двух групп вершин, им соответсвуют операции  &amp;lt;math&amp;gt;a*b, \quad c+d&amp;lt;/math&amp;gt;. Данный граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19096</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19096"/>
		<updated>2016-11-24T12:21:15Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Описанный граф  выполнен для случая &amp;lt;math&amp;gt;m = 4, n = 5&amp;lt;/math&amp;gt;. Здесь вершины обозначены голубым цветом. Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма нахождения скалярного произведения двух векторов состоит из двух групп вершин, расположенной в целочисленных узлах двумерной области, им соответсвуют операции  &amp;lt;math&amp;gt;a*b&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c+d&amp;lt;/math&amp;gt;. Граф изображен для случая &amp;lt;math&amp;gt;n = 24&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19095</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=19095"/>
		<updated>2016-11-24T12:11:46Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Обобщеннный метод минимальных невязок&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(mn+m^2+n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основные авторы описания: [[Участник:Эльвира Ахиярова|Э.А.Ахиярова]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) - это итерационный метод для нахождения приближенного решения системы линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax = b &amp;lt;/math&amp;gt; с произвольной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Алгоритм был преложен в 1986 году  Йозефом Саадом и Мартином Г. Шульцем&lt;br /&gt;
&amp;lt;ref&amp;gt;Y. Saad and M.H. Schultz, &amp;quot;GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems&amp;quot;, SIAM J. Sci. Stat. Comput., 7:856-869, 1986. doi:10.1137/0907058.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В то время как применение классических итерационных алгоритмов для решения СЛАУ ограничивается либо диагональным преобладанием, либо положительной определенностью матрицы, GMRES может быть использован для систем с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. Данный метод опирается на итерации Арнольди для нахождения минимизирующего невязку вектора из подпространства Крылова &amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Krylov_subspace&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Основным недостатком метода GMRES является поитерационное увеличение объема требуемой памяти. В связи с этим, для некоторых вычислительных систем выполенние программы метода может быть невозможным. Для некоторых систем используют модифицированный  обобщенный метод минимальных невязок - GMRES(m), который подразумевает использование рестартов, существенно сокращающих объемы необходимой памяти.&lt;br /&gt;
&lt;br /&gt;
Ключевая идея обобщенного метода минимальных невязок основана на решении задачи наименьших квадратов на каждом итерационном шаге. На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b &amp;lt;/math&amp;gt; аппроксимируется вектором &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;, таким образом, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 = \|Ax_k-b{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
где &amp;lt;math&amp;gt;K_k&amp;lt;/math&amp;gt; - подпространство Крылова &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; - го порядка.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Приближенное решение &amp;lt;math&amp;gt;\tilde{x} \in R^n&amp;lt;/math&amp;gt; системы &amp;lt;math&amp;gt;Ax = b&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-м шаге метода решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; рассматривается в виде &amp;lt;math&amp;gt;x_0+Vy_k&amp;lt;/math&amp;gt;, где столбцы &amp;lt;math&amp;gt;v_k&amp;lt;/math&amp;gt; матрицы &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; находятся с помощью процесса Арнольди для построения ортонормированного базиса &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства Крылова &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;,&lt;br /&gt;
вектор &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; представляет собой решение системы &amp;lt;math&amp;gt;H_ky_k = \beta_k e_1&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя  матрица Хессенберга&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/Hessenberg_matrix&amp;lt;/ref&amp;gt; размера &amp;lt;math&amp;gt;k\times k&amp;lt;/math&amp;gt;, элементы которой формируются в процессе ортогонализации Арнольди, &amp;lt;math&amp;gt;\beta_k = \|r_0{\|}_2, \ r_0 = b - Ax_0 &amp;lt;/math&amp;gt;, и, наконец, &amp;lt;math&amp;gt;e_1&amp;lt;/math&amp;gt; - канонический вектор &amp;lt;math&amp;gt;{\begin{pmatrix}1&amp;amp;0&amp;amp;\dots 0\end{pmatrix}}^T&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее процесс ортогонализации Арнольди:&lt;br /&gt;
&lt;br /&gt;
==== Процесс Арнольди ====&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; начальный ортонормированный вектор &amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; и размерность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; Ортонормированный базис &amp;lt;math&amp;gt;\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; подпространства &amp;lt;math&amp;gt;K_k(A, v_1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
&amp;amp;\omega = Av_j \\&lt;br /&gt;
&amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
&amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
&amp;amp;h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
&amp;amp;v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
&amp;amp;j  = \overline{1,k}, \  i = \overline{1,j} &lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В результате выполнения процесса Арнольди получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;V_k =\{v_1, v_2, \dots, v_k\}&amp;lt;/math&amp;gt; - ортонормированный базис подпространства Крылова&lt;br /&gt;
:&amp;lt;math&amp;gt;\overline{V_k} = \{v_1, v_2, \dots, v_k, v_{k+1}\}&amp;lt;/math&amp;gt; - матрица, расширенная последним вычисленным вектором &amp;lt;math&amp;gt;v_{k+1}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; - верхняя Хессенбергова матрица, элементы которой равны коэффициентам ортогонализации:&lt;br /&gt;
:&amp;lt;math&amp;gt;H_k = &lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
h_{11} &amp;amp; h_{12} &amp;amp; h_{13} &amp;amp; h_{14} &amp;amp; \dots &amp;amp; h_{1k} \\&lt;br /&gt;
h_{21} &amp;amp; h_{22} &amp;amp; h_{23} &amp;amp; h_{24} &amp;amp; \dots &amp;amp; h_{2k} \\&lt;br /&gt;
0 &amp;amp; h_{32} &amp;amp; h_{33} &amp;amp; h_{34} &amp;amp; \dots &amp;amp; h_{3k} \\&lt;br /&gt;
\vdots &amp;amp; &amp;amp;\ddots &amp;amp; \ddots &amp;amp; &amp;amp; \vdots \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; h_{k-1,k-2}&amp;amp; h_{k-1, k-1} &amp;amp; h_{k-1, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; 0 &amp;amp; 0 &amp;amp; h_{k, k-1} &amp;amp; h_{k, k} \\&lt;br /&gt;
0 &amp;amp; \dots &amp;amp; &amp;amp; &amp;amp; 0&amp;amp; h_{k+1, k}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Минимизация нормы невязки ====&lt;br /&gt;
Выполнив несложные преобразования можно получить выражение для невязки на &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- й итерации:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
r_k = \beta e_1 - H_ky_k&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Очевидно, что для задачи&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\|r_k{\|}_2 \to \min&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
минимум достигается при &lt;br /&gt;
:&amp;lt;math&amp;gt; H_ky_k = \beta e_1  &amp;lt;/math&amp;gt;&lt;br /&gt;
Для решения последней системы матрица &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; приводится к верхнему треугольному виду с помощью &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; вращений Гивенса:&lt;br /&gt;
:&amp;lt;math&amp;gt; R_k = \Omega_k\Omega_{k-1}\dots \Omega_1 &amp;lt;/math&amp;gt;,&lt;br /&gt;
:&amp;lt;math&amp;gt; \Omega_i = \begin{pmatrix} 1 &amp;amp; &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;\ddots &amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp; \\        &lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;c_i&amp;amp;s_i &amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;-s_i&amp;amp; c_i &amp;amp;&amp;amp;&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1&amp;amp;&amp;amp;&amp;amp; \\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;\ddots&amp;amp;\\&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;&amp;amp;1 \\  \end{pmatrix}, \quad  &lt;br /&gt;
s_i = \frac{h_{i+1,i}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}, \quad c_i = \frac{h_{ii}}{\sqrt{h_{ii}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро последовательной версии метода GMRES состоит из вычислений произведений матрицы на вектор и скалярного произведения в процессе Арнольди и произведений матрицы на вектор, обращений верхней треугольной матрицы для нахождения решения задачи минимизации невязки.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В методе используются следующие макрооперции:&lt;br /&gt;
* Умножение матрицы на вектор&lt;br /&gt;
* Вычисление скалярного произведение двух векторов&lt;br /&gt;
* Нахождени &amp;lt;math&amp;gt;l_2&amp;lt;/math&amp;gt;-нормы вектора&lt;br /&gt;
* Умножение матриц специальной структуры&lt;br /&gt;
* Решение системы уравнений с верхней треугольной матрицей&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
Для  обобщенного метода мимнимальных невязок число векторов порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, которых необходимо хранить в памяти,  растет линейно с ростом &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, в то время как число умножений имеет квадратичную зависимость от числа итераций. Этот факт является мотивацией для того, чтобы использовать метод минимальных невязок с рестартами. Вместо того, чтобы формировать базис размерности &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, выбирается параметр &amp;lt;math&amp;gt;m &amp;lt;&amp;lt; n &amp;lt;/math&amp;gt; и с помощью ортонормированного базиса размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; строится приближенное решение. Посредством такой схемы необходимое количество памяти может быть оценено заранее и оставаться внутри определенных пределов. Приведем подробное описание алгоритма GMRES c рестартами:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;math&amp;gt;k = 0 &amp;lt;/math&amp;gt;; инициализировать &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;r_0=b-Ax_0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_0}{\|r_0 \|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Выполнить &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов процессса Арнольди:&lt;br /&gt;
   &lt;br /&gt;
   Для &amp;lt;math&amp;gt; j  = \overline{1,m} &amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
      &amp;lt;math&amp;gt;&lt;br /&gt;
      \omega = Av_j &lt;br /&gt;
      &amp;lt;/math&amp;gt;&lt;br /&gt;
      Для &amp;lt;math&amp;gt; i = \overline{1,j} &amp;lt;/math&amp;gt; выполнять: &lt;br /&gt;
           &amp;lt;math&amp;gt;&lt;br /&gt;
           \begin{align}&lt;br /&gt;
            &amp;amp;h_{ij} = (\omega, v_i)   \\&lt;br /&gt;
            &amp;amp;\omega = \omega - h_{ij}v_i \\&lt;br /&gt;
            \end{align}&lt;br /&gt;
           &amp;lt;/math&amp;gt;&lt;br /&gt;
       &amp;lt;math&amp;gt;&lt;br /&gt;
          \begin{align}&lt;br /&gt;
           h_{(i+1)j} = \|\omega\| \\&lt;br /&gt;
           v_{j+1} = \frac{\omega}{h_{(i+1)j}} \\&lt;br /&gt;
         \end{align}&lt;br /&gt;
      &amp;lt;/math&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
3. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \| \beta e_1 - H_m y \|,\ y \in \R^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x_m=x_0+V_my_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если требуемая точность достигнута, остановиться&lt;br /&gt;
&lt;br /&gt;
5. Рестарт:&lt;br /&gt;
   &amp;lt;math&amp;gt;x_0 = x_m&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;r_m = \frac{r_m}{\|r_m\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
   Перейти к шагу 2.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Вычислительная сложность метода GMRES складывается из сложности решения задачи минимизации невязки и сложности процесса Арнольди. Так как в  &lt;br /&gt;
задаче минимизации невязки матрица системы имеет размер &amp;lt;math&amp;gt;m+1 \times m&amp;lt;/math&amp;gt;, для нахождения решения требуется  &amp;lt;math&amp;gt;O(m^2)&amp;lt;/math&amp;gt; операций. Процесс &lt;br /&gt;
Арнольди предполагает выполнение &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt; операций плюс &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций для умножений матрицы на вектор.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Основным ресурсом параллелизма будут являться умножение матрицы на вектор&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Умножение_плотной_неособенной_матрицы_на_вектор_(последовательный_вещественный_вариант)&amp;lt;/ref&amp;gt; и вычисление скалярных произведений&amp;lt;ref&amp;gt;https://algowiki-project.org/ru/Скалярное_произведение_векторов,_вещественная_версия,_последовательно-параллельный_вариант&amp;lt;/ref&amp;gt;. Представим информационные графы для данных алгоритмов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumb&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbinner&amp;quot; style=&amp;quot;width:{{#expr: (700 + 15) + 3 * (3 - 1) + 8}}px&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;gallery widths=600px heights=600px&amp;gt;&lt;br /&gt;
File:Matvec.png|Рисунок 1. Граф последовательного умножения плотной матрицы на вектор с отображением входных и выходных данных&lt;br /&gt;
File:Dot.png|Рисунок 2. Последовательно-параллельное вычисление скалярного произведения &lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;thumbcaption&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма умножения плотной матрицы на вектор состоит из одной группы вершин, расположенной в целочисленных узлах двумерной области, соответствующая ей операция  &amp;lt;math&amp;gt;a+bc&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Естественно введённые координаты области таковы: &lt;br /&gt;
* &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; — меняется в диапазоне от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;, принимая все целочисленные значения;&lt;br /&gt;
* &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; — меняется в диапазоне от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, принимая все целочисленные значения.&lt;br /&gt;
&lt;br /&gt;
Аргументы операции следующие:&lt;br /&gt;
*&amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;:&lt;br /&gt;
** при &amp;lt;math&amp;gt;j = 1&amp;lt;/math&amp;gt; константа &amp;lt;math&amp;gt;0.&amp;lt;/math&amp;gt;; &lt;br /&gt;
** при &amp;lt;math&amp;gt;j &amp;gt; 1&amp;lt;/math&amp;gt; — результат срабатывания операции, соответствующей вершине с координатами &amp;lt;math&amp;gt;i, j-1&amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; — элемент &#039;&#039;входных данных&#039;&#039;, а именно  &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; - элемент входных данных &amp;lt;math&amp;gt;x_{j}&amp;lt;/math&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
Результат срабатывания операции является:&lt;br /&gt;
* при &amp;lt;math&amp;gt;j &amp;lt; n&amp;lt;/math&amp;gt; - &#039;&#039;промежуточным данным&#039;&#039; алгоритма;&lt;br /&gt;
* при &amp;lt;math&amp;gt;j = n&amp;lt;/math&amp;gt; - выходным данным.&lt;br /&gt;
&lt;br /&gt;
Описанный граф можно посмотреть на рисунке, выполненном для случая &amp;lt;math&amp;gt;m = 4, n = 5&amp;lt;/math&amp;gt;. Здесь вершины обозначены голубым цветом. Изображена подача только входных данных из вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, подача элементов матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, идущая во все вершины, на рисунке не представлена.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;умножения квадратной матрицы на вектор&#039;&#039;&#039; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
&lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
Для умножения матрицы размером &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; строк на &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; столбцов на вектор порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; в последовательном (наиболее быстром) варианте требуется:&lt;br /&gt;
 &lt;br /&gt;
* по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций).&lt;br /&gt;
&lt;br /&gt;
При этом использование режима накопления требует совершения умножений и сложений в режиме двойной точности, а в параллельном варианте это означает, что практически все промежуточные вычисления для выполнения алгоритма в режиме накопления должны быть двойной точности. В отличие от последовательного варианта это означает некоторое увеличение требуемой памяти.&lt;br /&gt;
&lt;br /&gt;
При классификации по высоте ЯПФ, таким образом, алгоритм умножения матрицы на вектор относится к алгоритмам &#039;&#039;с линейной сложностью&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;линейной&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для &#039;&#039;&#039;вычисления скалярного произведения векторов размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&#039;&#039;&#039; параллельном варианте требуется последовательно выполнить следующие ярусы:&lt;br /&gt;
* 1 ярус вычисления произведений,&lt;br /&gt;
* &amp;lt;math&amp;gt;k - 1&amp;lt;/math&amp;gt; ярусов суммирования по частям массивов (&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; ветвей),&lt;br /&gt;
* &amp;lt;math&amp;gt;p - 1&amp;lt;/math&amp;gt; ярусов суммирования (одна последовательная ветвь),&lt;br /&gt;
где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;- номер процессора.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в параллельном варианте критический путь алгоритма  (и соответствующая ему высота ЯПФ) будет зависеть от произведённого разбиения массива на части. В оптимальном случае (&amp;lt;math&amp;gt;p = \sqrt{n}&amp;lt;/math&amp;gt;) высота ЯПФ будет равна &amp;lt;math&amp;gt; 2 \sqrt{n} - 1&amp;lt;/math&amp;gt;. При классификации по высоте ЯПФ, таким образом, последовательно-параллельный метод относится к алгоритмам &#039;&#039;со сложностью «корень квадратный»&#039;&#039;. При классификации по ширине ЯПФ его сложность также будет &#039;&#039;«корень квадратный»&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; Матрица &amp;lt;math&amp;gt;A \in R^{n\times n}&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;b \in R^n&amp;lt;/math&amp;gt;, точность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n^2 + n + 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; Вектор &amp;lt;math&amp;gt;x_m \in R^n&amp;lt;/math&amp;gt;. Объём: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
В точной арифметике GMRES всегда сходится не более чем за &amp;lt;math&amp;gt;n &amp;lt;/math&amp;gt; итераций (т.к. &amp;lt;math&amp;gt;K_n = R^n = Im(A)&amp;lt;/math&amp;gt;). При этом  последовательность решений сходится монотонно, в связи с тем, что &amp;lt;math&amp;gt;\|r_{m+1}\| \le \|r_m\|&amp;lt;/math&amp;gt;. Этот факт справедлив из-за того, что подпространства, по которым минимизируется &amp;lt;math&amp;gt;\|r_m\|&amp;lt;/math&amp;gt;, вложены друг в друга: &amp;lt;math&amp;gt;K_m \subset K_{m+1}&amp;lt;/math&amp;gt;. Таким образом, минимизация по подпрастранствам большей размерности приведет нас к меньшей норме невязки.&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости метода зависит от расположения собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; на комплексной плоскости. Для быстрой сходимости, собственные значения  должны быть сконцентрированны на достаточном расстоянии от начала координат. Заметим, что расположение собственных чисел намного важнее, чем число обусловленности матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, являющимся главным критерием быстрой сходимости для метода сопряженных градиентов.&lt;br /&gt;
&lt;br /&gt;
Если обобщенный метод минимальных невязок применяется к СЛАУ с матрицами, обладающими &amp;quot;хорошим&amp;quot; распределением собственных чисел, то он может работать быстрее чем стандартное &amp;lt;math&amp;gt;LU&amp;lt;/math&amp;gt; разложение даже в том случае, если матрица плотна и неструктурированна.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Реализации обобщенного метода минимальных невязок (GMRES) присутствуют во многих пакетах. Приведем некоторые из них:&lt;br /&gt;
* [http://www.netlib.org/linpack/ LINPACK]&lt;br /&gt;
* [http://math.nist.gov/tnt/download.html/ JAMA/C++] &lt;br /&gt;
* [http://math-atlas.sourceforge.net/ ATLAS] &lt;br /&gt;
* [http://software.intel.com/mkl‎/ Intel MLK]&lt;br /&gt;
* [http://math.nist.gov/iml++/ IML++]&lt;br /&gt;
* [http://netlib.org/lapack/ LAPACK]&lt;br /&gt;
* [http://osl.iu.edu/research/mtl/ MTL]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/software/SPARSKIT/ SPARSKIT]&lt;br /&gt;
* [http://researcher.watson.ibm.com/researcher/view_group.php?id=1426 WSMP]&lt;br /&gt;
* [https://www.mcs.anl.gov/petsc/ PETSC]&lt;br /&gt;
* [https://www.scipy.org// SciPy]&lt;br /&gt;
* [https://www.mathworks.com/ Matlab]&lt;br /&gt;
* [https://fenicsproject.org/ FEniCS Project]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[1] A parallel implementation of the restarted GMRES iterative algorithm for nonsymmetric systems of linear equations, Rudnei Dias da Cunha, Centro de Processamento de Dados, Universidade Federal do Rio Grande do Sul, Brazil and Computing Laboratory, University of Kent, Canterbury, UK and Tim Hopkins, Computing Laboratory, University of Kent, Canterbury, UK, 1993&lt;br /&gt;
[2] Gene H. Golub, Charles F. Van Loan, Matrix and Computations, 4th edition&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11224</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11224"/>
		<updated>2016-10-15T18:55:42Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Основная идея метода GMRES основана на минимизации нормы невязки на каждом итерационном шаге.  На каждой &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-й итерации   точное решение &amp;lt;math&amp;gt;x^* = A^{-1}b&amp;lt;/math&amp;gt; приближается к вектору &amp;lt;math&amp;gt;x_k \in K_k&amp;lt;/math&amp;gt;(k-е подпространство Крылова) в том смысле, что&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\|r_k{\|}_2 &amp;amp;= \|Ax_k-b{\|}_2 \to \min\limits_{x_k \in K_k}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Приближенное  решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; для системы линейных алгебраических уравнений &lt;br /&gt;
&lt;br /&gt;
с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ищется в виде:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11142</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11142"/>
		<updated>2016-10-15T18:35:58Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Приближенное  решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; для системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ищется в виде:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_k &amp;amp; = x_0+z_k \\&lt;br /&gt;
z_k &amp;amp; \in K_k = &amp;lt;r_0, Ar_0, \dots A^{k-1}r_0&amp;gt;,\\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;r_0 = Ax_0-b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11139</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11139"/>
		<updated>2016-10-15T18:35:33Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Приближенное  решение &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; для системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ищется в виде:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_k &amp;amp; = x_0+z_k \\&lt;br /&gt;
z_k &amp;amp; \in K_k = &amp;lt;r_0, Ar_0, \dots A^{k-1}r_0&amp;gt;,\\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;mayh&amp;gt;r_0 = Ax_0-b&amp;lt;/math&amp;gt;&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11134</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11134"/>
		<updated>2016-10-15T18:34:54Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Приближенного  решения &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt; для системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
с произвольной невырожденной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; ищется в виде:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_k &amp;amp; = x_0+z_k&lt;br /&gt;
z_k &amp;amp; \in K_k = &amp;lt;r_0, Ar_0, \dots A^{k-1}r_0&amp;gt;,&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;mayh&amp;gt;r_0 = Ax_0-b&amp;lt;/math&amp;gt;&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11079</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11079"/>
		<updated>2016-10-15T18:20:48Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для  решения системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11077</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11077"/>
		<updated>2016-10-15T18:20:04Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для  решения системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11076</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11076"/>
		<updated>2016-10-15T18:19:40Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для  решения системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{equation}&lt;br /&gt;
&amp;lt;/mathL&amp;gt;&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0 &amp;lt;/math&amp;gt;+&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11073</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=11073"/>
		<updated>2016-10-15T18:19:04Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Для  решения системы линейных алгебраических уравнений &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{equation}&lt;br /&gt;
Ax = f&lt;br /&gt;
\end{equation}&lt;br /&gt;
Исходные данные: Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), начальное приближение &amp;lt;math&amp;gt; x_0.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: Приближенное решение уравнения &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=10559</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=10559"/>
		<updated>2016-10-15T16:39:05Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: положительно определённая симметрическая матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: нижняя треугольная матрица &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
l_{11} &amp;amp; = \sqrt{a_{11}}, \\&lt;br /&gt;
l_{j1} &amp;amp; = \frac{a_{j1}}{l_{11}}, \quad j \in [2, n], \\&lt;br /&gt;
l_{ii} &amp;amp; = \sqrt{a_{ii} - \sum_{p = 1}^{i - 1} l_{ip}^2}, \quad i \in [2, n], \\&lt;br /&gt;
l_{ji} &amp;amp; = \left (a_{ji} - \sum_{p = 1}^{i - 1} l_{ip} l_{jp} \right ) / l_{ii}, \quad i \in [2, n - 1], j \in [i + 1, n].&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Существует также блочная версия метода, однако в данном описании разобран только точечный метод.&lt;br /&gt;
&lt;br /&gt;
В ряде реализаций деление на диагональный элемент выполняется в два этапа: вычисление &amp;lt;math&amp;gt;1/l_{ii}&amp;lt;/math&amp;gt; и затем умножение на него всех (видоизменённых) &amp;lt;math&amp;gt;a_{ji}&amp;lt;/math&amp;gt; . Здесь мы этот вариант алгоритма не рассматриваем. Заметим только, что он имеет худшие параллельные характеристики, чем представленный.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;[[Разложение Холецкого (метод квадратного корня)|Читать полностью…]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=10551</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=10551"/>
		<updated>2016-10-15T16:37:06Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
$$ a_{kj} = 2^n $$&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=6455</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=6455"/>
		<updated>2016-10-13T13:02:23Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=6453</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=6453"/>
		<updated>2016-10-13T13:01:49Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок(GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
Наиболее популярные реализации метода основаны на модифицированном алгоритме ортогонализации Грама-Шмидта и на использовании рестартов для управления требуемым объемом памяти.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6425</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6425"/>
		<updated>2016-10-13T12:25:39Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Перенос */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
Статья: [[Ортогонализация Грама-Шмидта]];&lt;br /&gt;
Выполняют: [[Участник:KibAndrey| Кибанов Андрей]] и Аджиева Татьяна&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Anlesnichiy|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Строгий_алгоритм_С_средних_(Hard_C-Means,_HCM)]];&lt;br /&gt;
Выполняют: [[Участник:Светлана_Лукьяненко|Лукьяненко Светлана]] и [[Участник:Юрий_Комаров|Комаров Юрий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы]];&lt;br /&gt;
Выполняют: [[Участник: Galkina|Галкина А.С.]], [[Участник: Игорь|Плахов И.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод рекурсивной координатной бисекции]];&lt;br /&gt;
Выполняют: [[Участник: Obirvalger|Гордеев Михаил]], [[Участник: KolmakovEA|Колмаков Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)]];&lt;br /&gt;
Выполняют: [[Участник: Эльвира Ахиярова|Ахиярова Эльвира]]&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6424</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6424"/>
		<updated>2016-10-13T12:24:51Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Перенос */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
Статья: [[Ортогонализация Грама-Шмидта]];&lt;br /&gt;
Выполняют: [[Участник:KibAndrey| Кибанов Андрей]] и Аджиева Татьяна&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Anlesnichiy|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Строгий_алгоритм_С_средних_(Hard_C-Means,_HCM)]];&lt;br /&gt;
Выполняют: [[Участник:Светлана_Лукьяненко|Лукьяненко Светлана]] и [[Участник:Юрий_Комаров|Комаров Юрий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы]];&lt;br /&gt;
Выполняют: [[Участник: Galkina|Галкина А.С.]], [[Участник: Игорь|Плахов И.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод рекурсивной координатной бисекции]];&lt;br /&gt;
Выполняют: [[Участник: Obirvalger|Гордеев Михаил]], [[Участник: KolmakovEA|Колмаков Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)]];&lt;br /&gt;
Выполняют: [[Участник: Эльвира Ахиярова|Гордеев Михаил]]&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4361</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4361"/>
		<updated>2016-09-27T17:08:23Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Метод минимальных невязок(GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Y.Saad, M.H. Schultz, GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems, SIAM J. Scientific and Stat. Comp. 7: 856-869 (1986). &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4360</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4360"/>
		<updated>2016-09-27T16:58:02Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Метод минимальных невязок(GMRES) является итерационным методом нахождения решения для системы линейных алгебраических уравнений с произвольной невырожденной матрицей. Метод основан на минимизации квадратичного функционала невязки на подпространствах Крылова. &lt;br /&gt;
GMRES был предложен Йозефом Саадом и Мартином Шульцем в 1986 году.&amp;lt;ref&amp;gt;Commandant Benoit, Note sur une méthode de résolution des équations normales provenant de l&#039;application de la méthode des moindres carrés à un système d&#039;équations linéaires en nombre inférieur à celui des inconnues (Procédé du Commandant Cholesky), Bulletin Géodésique 2 (1924), 67-77.&amp;lt;/ref&amp;gt;&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
In mathematics, the generalized minimal residual method (usually abbreviated GMRES) is an iterative method for the numerical solution of a nonsymmetric system of linear equations. The method approximates the solution by the vector in a Krylov subspace with minimal residual. The Arnoldi iteration is used to find this vector.&lt;br /&gt;
&lt;br /&gt;
The GMRES method was developed by Yousef Saad and Martin H. Schultz in 1986.[1] GMRES is a generalization of the MINRES method developed by Chris Paige and Michael Saunders in 1975. GMRES also is a special case of the DIIS method developed by Peter Pulay in 1980. DIIS is also applicable to non-linear systems.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4359</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4359"/>
		<updated>2016-09-27T16:23:19Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4358</id>
		<title>Участница:Эльвира Ахиярова/Итерационный метод решения системы линейных алгебраических уравнений GMRES (обобщенный метод минимальных невязок)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:%D0%AD%D0%BB%D1%8C%D0%B2%D0%B8%D1%80%D0%B0_%D0%90%D1%85%D0%B8%D1%8F%D1%80%D0%BE%D0%B2%D0%B0/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9_GMRES_(%D0%BE%D0%B1%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%BD%D0%B5%D0%B2%D1%8F%D0%B7%D0%BE%D0%BA)&amp;diff=4358"/>
		<updated>2016-09-27T16:22:25Z</updated>

		<summary type="html">&lt;p&gt;Эльвира Ахиярова: Новая страница: «== Свойства и структура алгоритма ==  === Общее описание алгоритма === Назначение: кластериза…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Назначение: кластеризация больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Достоинства: легкость реализации, вычислительная простота.&lt;br /&gt;
&lt;br /&gt;
Недостатки: задание количества кластеров, отсутствие гарантии в нахождении оптимального&lt;br /&gt;
решения. &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Эльвира Ахиярова</name></author>
	</entry>
</feed>