<?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%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0+%D0%98%D1%80%D0%B8%D0%BD%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%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0+%D0%98%D1%80%D0%B8%D0%BD%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%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%D0%B0"/>
	<updated>2026-10-22T15:50:25Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%93%D0%BB%D0%BE%D1%81%D1%81%D0%B0%D1%80%D0%B8%D0%B9&amp;diff=22382</id>
		<title>Глоссарий</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%93%D0%BB%D0%BE%D1%81%D1%81%D0%B0%D1%80%D0%B8%D0%B9&amp;diff=22382"/>
		<updated>2017-02-07T09:54:29Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Граф алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Временна́я локальность ===&lt;br /&gt;
&#039;&#039;&#039;Временная локальность&#039;&#039;&#039; (temporal locality) показывает среднее число обращений по одному адресу в память за время исполнения всей программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительная мощность ===&lt;br /&gt;
&#039;&#039;&#039;Вычислительная мощность&#039;&#039;&#039; (computational power) алгоритма равна отношению числа операций к суммарному объему входных и выходных данных. Она показывает, сколько операций приходится на единицу переданных данных.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительная сложность ===&lt;br /&gt;
&#039;&#039;&#039;Вычислительная сложность&#039;&#039;&#039; (computational complexity) задачи &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; - количество основных вычислительных шагов лучшего последовательного алгоритма, необходимых для решения задачи на одном процессоре. Вычислительная сложность обычно является некоторой функцией от размера входных данных программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
&#039;&#039;&#039;Вычислительное ядро&#039;&#039;&#039; (computational kernel) алгоритма - это часть алгоритма, на которую приходится основное время его работы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Граф алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Граф алгоритма&#039;&#039;&#039; (algorithm graph) - это ориентированный ациклический мультиграф, вершины которого соответствуют операциям алгоритма, а дуги - передаче данных между ними. Вершины графа алгоритма могут соединяться несколькими дугами, в частности когда в качестве разных аргументов одной и той же операции используется одна и та же величина. Граф алгоритма почти всегда является параметризованным графом. В частности, его вид часто зависит от входных данных.&lt;br /&gt;
&lt;br /&gt;
Граф алгоритма используется как удобное представление алгоритма при исследовании его структуры, ресурса параллелизма, а также других свойств. Его можно рассматривать как параметризованную информационную историю. Он сохраняет её информативность, при этом обладая компактностью за счёт параметризации. Разработана методика построения графа алгоритма по исходному тексту программ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;См. также: [https://ru.wikipedia.org/wiki/Граф_алгоритма Граф алгоритма]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Детерминированность ===&lt;br /&gt;
&#039;&#039;&#039;Детерминированность&#039;&#039;&#039; (determinacy) алгоритма - постоянство структуры вычислительного процесса. Алгоритм выдаёт уникальный и предопределённый результат для заданных входных данных.&lt;br /&gt;
&lt;br /&gt;
=== Избыточные вычисления ===&lt;br /&gt;
&#039;&#039;&#039;Избыточные вычисления&#039;&#039;&#039; (redundant computation) - понятие, которое используют для обозначения разных явлений в параллельных вычислениях. &lt;br /&gt;
* В понимании графовой модели вычислений это такие операции, результаты которых нигде не будут использованы. Такие операции появляются в результате ошибок программирования и подлежат удалению из алгоритма. &lt;br /&gt;
* Распространено также понимание термина как вычисления, которые &#039;&#039;выполняются более одного раза&#039;&#039; или на более чем одном процессоре. Избыточные вычисления могут использоваться либо в многопроцессорных системах, чтобы минимизировать обмены, либо при недостаточном объеме памяти для хранения всех вычисленных значений. &lt;br /&gt;
* Кроме этого, избыточными вычислениями можно назвать те операции, которые появляются при замене последовательного алгоритма на специальный параллельный. У последнего алгоритма больше операций, но меньше длина критического пути графа, этим и обосновывается замена алгоритма. В таком случае реальное ускорение параллельного алгоритма следует считать не в сравнении с однопроцессорной реализацией его самого, а в сравнении с реализацией последовательного алгоритма. В нашей открытой энциклопедии свойств алгоритмов именно последнее толкование термина применяется в категории [[http://algowiki-project.org/ru/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D1%81_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%BC%D0%B8_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%D0%BC%D0%B8 Алгоритмы с избыточными вычислениями]].&lt;br /&gt;
&lt;br /&gt;
=== Конечный параллелизм ===&lt;br /&gt;
&#039;&#039;&#039;Конечный параллелизм&#039;&#039;&#039; (finite parallelism) - параллелизм, определяемый информационной независимостью некоторых фрагментов в тексте программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Координатный параллелизм ===&lt;br /&gt;
&#039;&#039;&#039;Координатный параллелизм&#039;&#039;&#039; (coordinate parallelism) - частный случай [[#Скошенный паралеллизм|скошенного параллелизма]], определяемый циклами ParDO, при котором информационно независимые вершины лежат на гиперплоскостях, перпендикулярных одной из координатных осей.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Локальность (обращений в память) ===&lt;br /&gt;
&#039;&#039;&#039;Локальность (обращений в память)&#039;&#039;&#039; (locality) - общее предположение о свойстве работы программ с данными. Заключается в том, что при обращении к некоторым данным велика вероятность, что в скором времени произойдет повторное обращение к тем же или расположенным рядом данным. В частности, на основе данного предположения построена работа кэш-памяти. Различают [[#Локальность команд|локальность команд]] и [[#Локальность использования данных|локальность использования данных]], а также [[#Пространственная локальность|пространственную]] и [[#Временна́я локальность|временну́ю]] локальность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Локальность вычислений ===&lt;br /&gt;
&#039;&#039;&#039;Локальность вычислений&#039;&#039;&#039; (computation locality) - проекция идеи [[#Локальность (обращений в память)|локальности]] на конкретный класс данных в памяти - команды, из которых состоят программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Локальность использования данных ===&lt;br /&gt;
&#039;&#039;&#039;Локальность использования данных&#039;&#039;&#039; (data locality) - проекция идеи [[#Локальность (обращений в память)|локальности]] на конкретный класс данных в памяти - все данные, с которыми оперируют программы во время выполнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Массовый параллелизм ===&lt;br /&gt;
&#039;&#039;&#039;Массовый параллелизм&#039;&#039;&#039; (mass parallelism) - параллелизм, определяемый информационной независимостью итераций циклов программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость ===&lt;br /&gt;
&#039;&#039;&#039;Масштабируемость&#039;&#039;&#039; (scalability) - способность системы увеличивать свою [[#Производительность|производительность]] при добавлении ресурсов (обычно аппаратных). Система называется масштабируемой, если она способна увеличивать производительность пропорционально дополнительным ресурсам. Масштабируемость можно оценить через отношение прироста производительности системы к приросту используемых ей ресурсов. Чем ближе это отношение к единице, тем масштабируемость лучше.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость параллельной программы ===&lt;br /&gt;
&#039;&#039;&#039;Масштабируемость параллельной программы&#039;&#039;&#039; (scalability of parallel program) определяется относительно конкретного компьютера и показывает, как изменяются динамические характеристики данной программы в зависимости от её [[#Параметры запуска|параметров запуска]].&lt;br /&gt;
&lt;br /&gt;
Наиболее часто рассматриваемые разновидности масштабируемости параллельных программ: [[#Сильная масштабируемость|сильная масштабируемость]], [[#Масштабируемость вширь|масштабируемость вширь]], [[#Слабая масштабируемость|слабая масштабируемость]].&lt;br /&gt;
&lt;br /&gt;
Если при одновременном увеличении числа процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; и [[#Вычислительная сложность|вычислительной сложности]] задачи &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; [[#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E&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; (wide scaling) - зависимость [[#Производительность|производительности]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; от [[#Вычислительная сложность|вычислительной сложности]] задачи &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; при фиксированном числе процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;p=const&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Оценка daps ===&lt;br /&gt;
&#039;&#039;&#039;Оценка daps&#039;&#039;&#039; (daps estimation) - предлагаемая оценка производительности работы с памятью в программе, равна числу выполненных обращений в память в секунду. Построена по аналогии с распространенной оценкой производительности программ — flop/s (floating point operations per second), которая оценивает число операций с плавающей запятой в секунду. Оценка flop/s показывает производительность всей программы с точки зрения производимых вычислений; в то время как daps оценивает производительность программы с точки зрения работы с памятью.&lt;br /&gt;
&lt;br /&gt;
Данная оценка является машинно-зависимой — она вычисляется на основе данных аппаратных датчиков. Служит для проверки точности результатов разрабатываемых нами машинно-независимых оценок локальности, таких как [[#Оценка cvg|cvg]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Оценка cvg ===&lt;br /&gt;
&#039;&#039;&#039;Оценка cvg&#039;&#039;&#039; (cvg estimation) - предлагаемая машинно-независимая оценка локальности обращений в памяти в программе. Рассмотрим первые N обращений в потоке («окно»), и затем разобьем ось ординат (виртуальный адрес обращений) на отрезки длины K – [X .. X+K],  [X+K .. X+2K], …, [Y-K .. Y], где [X, Y] - диапазон выделенной под рассматриваемые массивы виртуальной памяти. Таким образом, область построения профиля делится на прямоугольники размером KxN. &lt;br /&gt;
&lt;br /&gt;
Физический смысл такого прямоугольника (при правильно подобранных значениях K и N) заключается в том, что любая последовательность точек, попавших в один прямоугольник, всегда обладает хорошей как пространственной, так и временно́й локальностью. Действительно, при достаточно малом значении K в прямоугольник попадает небольшой локальный фрагмент виртуальной памяти, а, значит, соседние обращения по памяти в любом случае будут расположены близко друг относительно друга. А временна́я локальность внутри прямоугольника не может быть больше N, поэтому при достаточно малом N можно обеспечить и хорошую временну́ю локальность. Однако не имеет смысла брать слишком малые значения для K и N, поскольку в этом случае теряется полезная информация о хорошей локальности не попавшего в прямоугольник фрагмента профиля.&lt;br /&gt;
&lt;br /&gt;
Выделим те прямоугольники, в которые попадает хотя бы одно обращение. Чем меньше таких прямоугольников – тем больше точек попало в одни и те же прямоугольники, тем в общем случае лучше локальность. Пример разбиения профиля на прямоугольники приведен на рис. 1. Здесь для иллюстрации выделено три «окна», в каждом по 6 точек. В первом «окне» всего 2 непустых прямоугольника и самая хорошая локальность их трех вариантов. Во втором «окне» задействованы все 4 прямоугольника, при этом в каждый попало лишь по 1-2 обращения. Третье «окно» включает 3 непустых прямоугольника, и в этом варианте локальность лучше, чем у второго «окна», но хуже, чем у первого.&lt;br /&gt;
&lt;br /&gt;
[[file:cvg.png|thumb|center|500px|Рисунок 1. Пример разбиения профиля на прямоугольники]]&lt;br /&gt;
&lt;br /&gt;
Теперь сдвинем «окно» на одно обращение вправо и снова определим непустые прямоугольники; и так далее для всего профиля обращений. В результате мы получим «покрытие» – последовательность непустых прямоугольников, в каждом из которых содержится хотя бы по одному обращению, т.е. по одной точке профиля.&lt;br /&gt;
&lt;br /&gt;
Далее для каждого «окна» посчитаем число таких непустых прямоугольников (обозначим это число как rects), в результате чего получим последовательность положительных натуральных чисел. Затем посчитаем среднее значение для данной последовательности. Полученное значение назовем оценкой локальности на основе метода покрытий и будем обозначать cvg.&lt;br /&gt;
&lt;br /&gt;
Значение K было решено выбрать равным 64 байт, поскольку это соответствует длине кэш-строки, а в пределах одной кэш-строки пространственная локальность заведомо достаточно хорошая. При этом если запрошено одно значение, то в кэш-память подтянется вся строка из 64 байт, то есть все данные, соответствующие определенному прямоугольнику.&lt;br /&gt;
&lt;br /&gt;
Оптимальное значение N для разных программ может существенно отличаться, но для выполнения корректного сравнения оценка было решено выбрать единственное значение N. Было проведено сравнение результатов для различных значений N, и в результате эмпирическим путем было получено, что наилучшие результаты достигаются при N=512.&lt;br /&gt;
&lt;br /&gt;
=== Параллельная сложность ===&lt;br /&gt;
&#039;&#039;&#039;Параллельная сложность&#039;&#039;&#039; (parallel complexity) алгоритма - число шагов, за которое можно выполнить данный алгоритм в предположении доступности неограниченного числа необходимых процессоров (функциональных устройств, вычислительных узлов, ядер и т.п.). Параллельная сложность алгоритма понимается как высота канонической [[#Ярусно-параллельная форма графа алгоритма|ярусно-параллельной формы]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Параметры запуска ===&lt;br /&gt;
&#039;&#039;&#039;Параметры запуска&#039;&#039;&#039; (startup parameters) параллельной программы - параметры, оказывающие влияние на работу параллельной программы, но не влияющие на реализацию алгоритма работы программы (например: размер задачи, число процессов, размер блока, число процессов на узел и т.п.) &lt;br /&gt;
Параметры запуска по типу можно разделить на:&lt;br /&gt;
# Аппаратные - относящиеся к параметрам аппаратуры.&lt;br /&gt;
# Системные - относящиеся к операционной системе, используемым библиотекам и системным приложениям и их настройкам.&lt;br /&gt;
# Программные - влияющие на логику работы программы или вычислительную сложность задачи, различные параметры, предусмотренные разработчиком.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пиковая производительность ===&lt;br /&gt;
&#039;&#039;&#039;Пиковая производительность&#039;&#039;&#039; (peak performance) &amp;lt;math&amp;gt;R_{peak}&amp;lt;/math&amp;gt; — теоретический предел [[#Производительность|производительности]] для данного компьютера. Пиковая производительность компьютера вычисляется как сумма пиковых производительностей всех входящих в него вычислительных устройств (процессоров, ускорителей и т.д.). Под пиковой производительностью каждого из вычислительных устройств понимают количество операций в секунду, которые он смог бы теоретически выполнять при полной загрузке всех своих компонент. Надо понимать, что пиковая производительность не только суперкомпьютера, но и, например, любого отдельно взятого процессора является величиной сугубо теоретической, недостижимой на практике.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность ===&lt;br /&gt;
&#039;&#039;&#039;Последовательная сложность&#039;&#039;&#039; (serial complexity) алгоритма - число операций, которые нужно выполнить при его последовательном исполнении.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Пространственная локальность ===&lt;br /&gt;
&#039;&#039;&#039;Пространственная локальность&#039;&#039;&#039; (spatial locality) отражает среднее расстояние между несколькими последовательными обращениями в память.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Производительность ===&lt;br /&gt;
&#039;&#039;&#039;Производительность&#039;&#039;&#039; (performance) &amp;lt;math&amp;gt;R=Op/t&amp;lt;/math&amp;gt; определяется количеством операций &amp;lt;math&amp;gt;Op&amp;lt;/math&amp;gt;, производимых данным компьютером в единицу времени. Для высокопроизводительных вычислений в расчёт обычно берут количество арифметических операций в секунду над вещественными данными, представленными в форме с плавающей точкой. Эта величина называется Flop/s (от английского Floating point operations per second).&lt;br /&gt;
&lt;br /&gt;
Поскольку современные суперкомпьютеры производят очень много таких операций в секунду, их производительность измеряется кратными величинами, такими как GFlop/s (&amp;lt;math&amp;gt;10^9&amp;lt;/math&amp;gt; операций в секунду), TFlop/s (&amp;lt;math&amp;gt;10^12&amp;lt;/math&amp;gt;), PFlop/s (&amp;lt;math&amp;gt;10^15&amp;lt;/math&amp;gt;). Производительность мощнейших современных суперкомпьютеров уже измеряется десятками PFlop/s, активно идёт обсуждение построения систем экзафлопсного (порядка &amp;lt;math&amp;gt;10^18&amp;lt;/math&amp;gt; операций в секунду) уровня производительности.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Профиль обращений в память ===&lt;br /&gt;
&#039;&#039;&#039;Профиль обращений в память&#039;&#039;&#039; (memory access profile) - последовательность выполняемых в программе обращений к данным в памяти, расположенных в том порядке, в котором обращения происходят в программе.&lt;br /&gt;
&lt;br /&gt;
Обозначим профиль обращений A = {A&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,A&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,…,A&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;}, где N – общее число всех обращений при выполнении программы. Номер i элемента A&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; в профиле указывает, каким по счету является данное обращение от начала выполнения программы. Любой элемент А&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; будем называть элементом профиля. Запись А&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; означает, что данный элемент имеет i-й порядковый номер; данная запись не содержит никакой информации о том, к какой переменной в программе происходит данное обращение.&lt;br /&gt;
&lt;br /&gt;
На данный момент рассматриваются в основном обращения к массивам, поскольку они являются самыми распространенными структурами данных. Каждое обращение представлено в профиле некоторым числом. Таким образом, профиль обращений представляет собой последовательность чисел, которыми могут являться: 1) индексы элементов массива (если профиль строится только для одного массива); 2) виртуальные адреса, к которым происходят обращения; 3) физические адреса. Естественно, в рамках одного профиля используются числа только одного типа.&lt;br /&gt;
&lt;br /&gt;
Подобные профили обращений содержат огромное количество полезной информации о работе программы с памятью. Интересным средством анализа профилей является изучение их визуального представления. Пример визуализации профиля приведен на рис. 2. Ось абсцисс — порядковый номер обращения в память, т. е. чем больше номер, тем позже произошло данное обращение. По оси ординат отложен виртуальный адрес памяти, к которому произошло обращение. Каждая точка — это отдельное обращение в память. &lt;br /&gt;
&lt;br /&gt;
[[file:locality_profile.png|thumb|center|500px|Рисунок 2. Визуализация профиля обращений в память]]&lt;br /&gt;
&lt;br /&gt;
Подобные графики сами по себе могут предоставить интересную информацию о поведении программы. Выделенная на рисунке область 1 (и остальные, аналогичные ей области), скорее всего, обладает хорошей пространственной и временно́й локальностью. Хорошей пространственной — потому что используются только соседние по памяти данные; хорошей временно́й — поскольку повторные обращения к этим данным происходят часто. Область 2 также обладает хорошей пространственной локальностью, поскольку соседние обращения происходят к соседним элементам, однако плохой временно́й локальностью, поскольку повторных обращений к данным просто нет.&lt;br /&gt;
&lt;br /&gt;
Помимо получения данных о локальности, исследование визуализации профилей обращений в память является хорошим средством для понимания и определения шаблонов обращений.&lt;br /&gt;
&lt;br /&gt;
Подобный анализ на основе визуализации профиля обращений помогает понять общее поведение программы, однако он не может дать точной количественной информации о взаимодействии программ с памятью. Для этих целей разрабатываются оценки локальности, такие как [[#Оценка daps|daps]] и [[#Оценка cvg|cvg]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Реальная производительность ===&lt;br /&gt;
&#039;&#039;&#039;Реальная производительность&#039;&#039;&#039; (real performance) &amp;lt;math&amp;gt;R_{max}&amp;lt;/math&amp;gt; — [[#Производительность|производительность]] данного компьютера на конкретном приложении.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Сильная масштабируемость ===&lt;br /&gt;
&#039;&#039;&#039;Сильная масштабируемость&#039;&#039;&#039; (strong scaling) - зависимость [[#Производительность|производительности]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; от количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; при фиксированной [[#Вычислительная сложность|вычислительной сложности]] задачи (&amp;lt;math&amp;gt;W=const&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Скошенный параллелизм ===&lt;br /&gt;
&#039;&#039;&#039;Скошенный параллелизм&#039;&#039;&#039; (skewed parallelism) - параллелизм в пространстве итераций, определяемый поверхностями уровней разверток. Ряд исследователей этим термином пользуется только для случая, когда параллелизм не является [[#Координатный паралеллизм|координатным]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Слабая масштабируемость ===&lt;br /&gt;
&#039;&#039;&#039;Слабая масштабируемость&#039;&#039;&#039; (weak scaling) - зависимость [[#Производительность|производительности]] &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; от количества процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; при фиксированной [[#Вычислительная сложность|вычислительной сложности]] задачи в пересчёте на один процессор (&amp;lt;math&amp;gt;W/p=const&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Степень исхода ===&lt;br /&gt;
&#039;&#039;&#039;Степень исхода&#039;&#039;&#039; (degree of a vertex) вершины информационного графа - количество исходящих из данной вершины информационных дуг.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Суперлинейное ускорение ===&lt;br /&gt;
&#039;&#039;&#039;Суперлинейное ускорение&#039;&#039;&#039; (super linear speedup) или &#039;&#039;&#039;сверхлинейное ускорение&#039;&#039;&#039; программы - это [[#Ускорение|ускорение]], превосходящие число используемых процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Чаще всего объясняется эффектом от использования кэш-памяти.&lt;br /&gt;
&lt;br /&gt;
=== Суперскалярность ===&lt;br /&gt;
&#039;&#039;&#039;Суперскалярность&#039;&#039;&#039; — архитектура вычислительного ядра, позволяющая загружать работой множество исполнительных блоков. Планирование исполнения команд является динамическим и осуществляется самим ядром. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;См. также:&#039;&#039;&lt;br /&gt;
* &#039;&#039;[https://ru.wikipedia.org/wiki/Суперскалярность Суперскалярность]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Ускорение ===&lt;br /&gt;
&#039;&#039;&#039;Ускорение&#039;&#039;&#039; (speedup) работы программы &amp;lt;math&amp;gt;S = T_1/T_p&amp;lt;/math&amp;gt; - отношение времени работы некоторой программы на одном процессоре &amp;lt;math&amp;gt;T_1&amp;lt;/math&amp;gt; ко времени работы распараллеленной программы при использовании &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессоров &amp;lt;math&amp;gt;T_p&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Устойчивость ===&lt;br /&gt;
&#039;&#039;&#039;Устойчивость&#039;&#039;&#039; (stability) алгоритма - свойство алгоритма не увеличивать или увеличивать в незначительной степени погрешности, допущенной в начальных данных или допускаемой при вычислениях.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Эквивалентное возмущение ===&lt;br /&gt;
&#039;&#039;&#039;Эквивалентное возмущение&#039;&#039;&#039; (equivalent perturbation) алгоритма - одна из характеристик влияния ошибок округления промежуточных операций на отклонение решения, получаемого алгоритмом, от настоящего решения задачи. Выражается косвенно: влияние ошибок на ответ считается таким же, как если бы данные были заданы с ошибкой, выражаемым эквивалентным возмущением, но задача с такими данными была бы решена точно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Эквивалентное преобразование ===&lt;br /&gt;
&#039;&#039;&#039;Эквивалентное преобразование&#039;&#039;&#039; (equivalent transformaion) программы - такое преобразование, при котором в точности сохраняется результат выполнения программы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Эффективность распараллеливания ===&lt;br /&gt;
&#039;&#039;&#039;Эффективность распараллеливания&#039;&#039;&#039; (parallel efficiency) &amp;lt;math&amp;gt;E = S/p&amp;lt;/math&amp;gt; (где &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; - полученное [[#Ускорение|ускорение]] работы программы, а &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - число используемых процессоров) определяет среднюю долю времени выполнения параллельного алгоритма, в течение которого процессоры реально используются для решения задачи. Получение большого ускорения за счёт использования большого числа процессоров зачастую приводит к снижению эффективности.&lt;br /&gt;
&lt;br /&gt;
Если не брать в расчёт эффект [[#Суперлинейное ускорение|суперлинейного ускорения]], то ускорение выполнения программы не превосходит числа используемых процессоров &amp;lt;math&amp;gt;p&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; (implementation efficiency) программы &amp;lt;math&amp;gt;R_{max}/R_{peak}&amp;lt;/math&amp;gt; определяется как отношение [[#Реальная производительность|реальной производительности]] &amp;lt;math&amp;gt;R_{max}&amp;lt;/math&amp;gt; к [[#Пиковая производительность|пиковой производительности]] &amp;lt;math&amp;gt;R_{peak}&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;
&#039;&#039;&#039;Ярусно-параллельная форма (ЯПФ)&#039;&#039;&#039; (parallel form) - это представление графа алгоритма, в котором:&lt;br /&gt;
* все вершины разбиты на перенумерованные подмножества ярусов;&lt;br /&gt;
* начальная вершина каждой дуги расположена на ярусе с номером меньшим, чем номер яруса конечной вершины;&lt;br /&gt;
* между вершинами, расположенными на одном ярусе, не может быть дуг.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Высота&#039;&#039; ЯПФ - это число ярусов.&lt;br /&gt;
Ширина яруса - число вершин, расположенных на ярусе.&lt;br /&gt;
&#039;&#039;Ширина&#039;&#039; ЯПФ - это максимальная ширина ярусов в ЯПФ.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Канонической ярусно-параллельной формой&#039;&#039;&#039; называется ЯПФ, высота которой на единицу больше длины критического пути, а все входные вершины расположены на первом ярусе. Для заданного графа его каноническая ЯПФ единственна. Высота канонической ЯПФ соответствует [[#Параллельная сложность|параллельной сложности]] алгоритма.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;См. также:&#039;&#039;&lt;br /&gt;
* &#039;&#039;[https://ru.wikipedia.org/wiki/Ярусно-параллельная_форма_графа Ярусно-параллельная форма графа]&#039;&#039;&lt;br /&gt;
* &#039;&#039;[https://ru.wikipedia.org/wiki/Критический_путь_графа Критический путь графа]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[En:Glossary]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
[[Категория:Algowiki:Справка]]&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20676</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20676"/>
		<updated>2016-12-11T22:13:33Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&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;m&amp;lt;/math&amp;gt; - размерность подпространства Крылова, &amp;lt;math&amp;gt;\varepsilon&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;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{m} - &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;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20675</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20675"/>
		<updated>2016-12-11T22:11:06Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&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;m&amp;lt;/math&amp;gt; - размерность подпространства Крылова, &amp;lt;math&amp;gt;\varepsilon&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;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{m} - &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;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20674</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20674"/>
		<updated>2016-12-11T22:10:00Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&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;m&amp;lt;\math&amp;gt; - размерность подпространства Крылова, &amp;lt;math&amp;gt;\varepsilon&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;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{m} - &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;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20670</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20670"/>
		<updated>2016-12-11T21:53:20Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Входные данные алгоритма: система линейных алгебраических уравнений, которую необходимо решить.&lt;br /&gt;
Параметры алгоритма: m - размерность подпространства Крылова, \varepsilon - параметр останова алгоритма.&lt;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;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{m} - &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;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20669</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20669"/>
		<updated>2016-12-11T21:48:22Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Входные данные алгоритма: система линейных алгебраических уравнений, которую необходимо решить.&lt;br /&gt;
Параметры алгоритма: m - размерность подпространства Крылова, \varepsilon - параметр останова алгоритма.&lt;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;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &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;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20667</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20667"/>
		<updated>2016-12-11T21:34:43Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Входные данные алгоритма: система линейных алгебраических уравнений, которую необходимо решить.&lt;br /&gt;
Параметры алгоритма: m - размерность подпространства Крылова, \varepsilon - параметр останова алгоритма.&lt;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;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20660</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20660"/>
		<updated>2016-12-11T20:21:39Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20659</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20659"/>
		<updated>2016-12-11T20:21:28Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
%%Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.%%&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20658</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20658"/>
		<updated>2016-12-11T20:21:15Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
%Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.%&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20657</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20657"/>
		<updated>2016-12-11T20:20:47Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
\begin{comment}Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.\end{comment}&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20656</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20656"/>
		<updated>2016-12-11T20:20:08Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
&#039;Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20655</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20655"/>
		<updated>2016-12-11T20:19:52Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
//Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20654</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20654"/>
		<updated>2016-12-11T20:19:31Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
/*&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20653</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20653"/>
		<updated>2016-12-11T20:16:59Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю. Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20591</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20591"/>
		<updated>2016-12-10T15:46:38Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20590</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20590"/>
		<updated>2016-12-10T15:45:44Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом и впервые предложен в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20580</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20580"/>
		<updated>2016-12-10T14:57:21Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
    mpicc main3.c -o prog&lt;br /&gt;
&lt;br /&gt;
    #!/bin/bash &lt;br /&gt;
    for a in `seq 0 7`; &lt;br /&gt;
    do &lt;br /&gt;
    let b=2**$a &lt;br /&gt;
    sbatch -p test -n $b impi ./prog&lt;br /&gt;
    sleep 600s &lt;br /&gt;
    done&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20301</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20301"/>
		<updated>2016-12-07T20:48:57Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальной невязкой. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
mpicc main3.c -o duck&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20298</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=20298"/>
		<updated>2016-12-07T20:44:35Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
Использованные команды для компиляции и запуска:&lt;br /&gt;
&lt;br /&gt;
mpicc main3.c -o duck&lt;br /&gt;
&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19948</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19948"/>
		<updated>2016-12-02T19:24:04Z</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              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(mn)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19942</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19942"/>
		<updated>2016-12-02T19:14:35Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Из рисунков видно, что при увеличении количества процессов, а также при увеличении размерности задачи, производительность параллельной реализации алгоритма уменьшается, что говорит о плохой масштабируемости. &lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19937</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19937"/>
		<updated>2016-12-02T18:49:20Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2048] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19936</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19936"/>
		<updated>2016-12-02T18:48:59Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2014] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. Размерность подпространства Крылова во всех случаях равна 10.&lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Рис.2 Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
[[File:Anyusheva iskhakovEfficiency.jpg|thumb|center|1500px|Рис.3 Изменение эффективности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19933</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19933"/>
		<updated>2016-12-02T18:45:54Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2014] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.002%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. &lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
&lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19932</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19932"/>
		<updated>2016-12-02T18:44:14Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследование масштабируемости параллельной реализации итерационного метода решения системы линейных алгебраических уравнений GMRES проводилось в тестовой среде суперкомпьютера &amp;quot;Ломоносов&amp;quot;. Алгоритм реализован на языке С с использованием библиотеки IntelMPI версии 4.1.0. Сборка производилась при помощи компилятора, разработанным компанией Intel версии 13.1.0.&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска:&lt;br /&gt;
*число процессов [1 : 128] со значениями, равными степеням двойки;&lt;br /&gt;
*размер матрицы [128 : 2014] с шагом 128.&lt;br /&gt;
В результате проведенных экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.02%;&lt;br /&gt;
*максимальная эффективность реализации 4.92%.&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации в зависимости от изменяемых параметров запуска. &lt;br /&gt;
[[File:Anyusheva iskhakovPerformance.jpg|thumb|center|1500px|Изменение производительности выполнения в зависимости от числа процессов и размера входной матрицы]]&lt;br /&gt;
&lt;br /&gt;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19923</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=19923"/>
		<updated>2016-12-02T17:04:59Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
Исследуемая реализация алгоритма доступна по [http://pastebin.com/vEyb3kuS ссылке].&lt;br /&gt;
&lt;br /&gt;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14573</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14573"/>
		<updated>2016-10-28T18:56:25Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{assignment}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14572</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14572"/>
		<updated>2016-10-28T18:56:11Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[assignment]]&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: [[U:Анюшева Ирина|Анюшева Ирина]] (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14263</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14263"/>
		<updated>2016-10-27T19:42:10Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Нижеперечисленные шаги алгоритма и входящие в них операции являются наиболее ресурсоемкими. Они выполняются в приведенном порядке. Каждый из них допускает распараллеливание:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14262</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14262"/>
		<updated>2016-10-27T19:21:55Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Реализация алгоритма в библиотеке IML++ [http://math.nist.gov/iml++/gmres.h.txt]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14261</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14261"/>
		<updated>2016-10-27T19:17:36Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеке SciPy [https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.sparse.linalg.gmres.html]&lt;br /&gt;
* Библиотека для MATLAB [http://www.mathworks.com/help/matlab/ref/gmres.html]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14254</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14254"/>
		<updated>2016-10-27T19:04:03Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* ЧАСТЬ. Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. М.Ю. Баландин, Э.П. Шурина. Некоторые оценки эффективности параллельных алгоритмов решения СЛАУ на подпространствах Крылова. - Вычислительные технологии, том 3, №1, 1998&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14252</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14252"/>
		<updated>2016-10-27T18:59:22Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* ЧАСТЬ. Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Е.Е. Тыртышников. Методы численного анализа. – Москва: Академия, 2007&lt;br /&gt;
&lt;br /&gt;
3. Бала&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14251</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14251"/>
		<updated>2016-10-27T18:51:04Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* ЧАСТЬ. Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1. Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2. Тыртышников Е.Е. Методы численного анализа. – Москва: Академия, 2007&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14250</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14250"/>
		<updated>2016-10-27T18:48:47Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* ЧАСТЬ. Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1.Y. Saad, M.H. Schultz. GMRES: A generalized minimal residual algorithm for solving nonsymmetric linear systems. SIAM J. Sci. Statist. Comput., 7 (1986), pp. 856–869&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14245</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14245"/>
		<updated>2016-10-27T18:39:47Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px|Рис.1. Информационная структура алгоритма GMRES]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14244</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14244"/>
		<updated>2016-10-27T18:35:53Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритма =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
===Ортогонализация Арнольди===&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
==Макроструктура алгоритма==&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
===Решение задачи минимизации невязки===&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
==Последовательная сложность алгоритма==&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
==Информационный граф==&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Ресурс параллелизма алгоритма==&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
==Входные и выходные данные алгоритма==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
==Динамические характеристики и эффективность реализации алгоритма==&lt;br /&gt;
&lt;br /&gt;
==Выводы для классов архитектур==&lt;br /&gt;
&lt;br /&gt;
==Существующие реализации алгоритма==&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Литература=&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14243</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14243"/>
		<updated>2016-10-27T18:34:03Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
== ЧАСТЬ. Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
== ЧАСТЬ. Литература==&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14242</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=14242"/>
		<updated>2016-10-27T18:30:17Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа, разделы: 1.1-1.2, 1.7-1.8, 2.7, 3), Исхаков Эльдар (614 группа, разделы 1.3-1.6, 1.9-1.10)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13424</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13424"/>
		<updated>2016-10-22T12:41:50Z</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              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм, что показано в блоке на темно-синем фоне. В блоке &amp;lt;math&amp;gt;min&amp;lt;/math&amp;gt; решается задача минимизации невязки, которая, строго говоря, является отдельной самостоятельной задачей.&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13314</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13314"/>
		<updated>2016-10-21T09:08:16Z</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              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм. &lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13313</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13313"/>
		<updated>2016-10-21T09:06:17Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм. &lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&lt;br /&gt;
&lt;br /&gt;
==Литература==&lt;br /&gt;
1.Y.Saad and M.Schultz GMRES: a generalized minimal residual algorithm for solving nonsymmetric linear systems&lt;br /&gt;
&lt;br /&gt;
2.Тыртышников Е. Е. Методы численного анализа&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13311</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13311"/>
		<updated>2016-10-21T08:54:38Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
Метод состоит из двух блоков: ортогонализация и минимизация невязки. При ортогонализации основными операциями являются умножение матрицы на вектор и скалярное умножение векторов, для которых возможен параллелизм. &lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13269</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13269"/>
		<updated>2016-10-20T14:55:49Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{2})&amp;lt;/math&amp;gt; сложений (вычитаний).&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
[[file:gmres.jpg|thumb|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Ресурс параллелизма алгоритма===&lt;br /&gt;
Для нахождения матрично-векторных произведений при вычислении невязок матрица СЛАУ должна быть подвергнута декомпозиции на строчные блоки, размеры которых определяются требованиями равномерности загрузки. Соответствующим образом подвергается декомпозиции и вектор правой части. Для наиболее эффективного вычисления скалярных произведений и линейных комбинаций векторов базиса каждый из векторов &amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13248</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13248"/>
		<updated>2016-10-19T22:16:44Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{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;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
===Выводы для классов архитектур===&lt;br /&gt;
&lt;br /&gt;
===Существующие реализации алгоритма===&lt;br /&gt;
* Реализация алгоритма в библиотеках LASpack, IML++, SciPy&lt;br /&gt;
* Библиотека для MATLAB: http://www.mathworks.com/help/matlab/ref/gmres.html&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13229</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13229"/>
		<updated>2016-10-19T20:17:23Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{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;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: GMRES в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13228</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13228"/>
		<updated>2016-10-19T20:17:06Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{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;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
* Вычислительная мощность: весьма маленькая и равна &amp;lt;math&amp;gt;m^2&amp;lt;/math&amp;gt;, так как &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Устойчивость: &amp;lt;math&amp;gt;GMRES&amp;lt;/math&amp;gt; в этом плане является очень хорошим методом. Теоретически можно получить точное решение не более чем за &amp;lt;math&amp;gt;n&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-1&amp;lt;/math&amp;gt; итераций дают невязку, равную некой константе, а на итерации под номером &amp;lt;math&amp;gt;m&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;
===Динамические характеристики и эффективность реализации алгоритма===&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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13224</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13224"/>
		<updated>2016-10-19T19:50:04Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = 1&lt;br /&gt;
| pf_width          = 1&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n^2+2n&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;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{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;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
&lt;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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13223</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%D0%BA:%D0%90%D0%BD%D1%8E%D1%88%D0%B5%D0%B2%D0%B0_%D0%98%D1%80%D0%B8%D0%BD%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=13223"/>
		<updated>2016-10-19T19:48:55Z</updated>

		<summary type="html">&lt;p&gt;Анюшева Ирина: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = GMRES (обобщенный метод минимальных невязок)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(m^2n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;n^2+2n&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = 1&lt;br /&gt;
| output_data       = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: Анюшева Ирина (614 группа), Исхаков Эльдар (614 группа)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Обобщенный метод минимальных невязок (GMRES) для решения системы линейных алгебраических уравнений аппроксимирует решение с помощью вектора в подпространстве Крылова с минимальным остатком. Метод GMRES разработан Ю.Саадом и Мартин Х. Шульцом в 1986 году.  Метод по праву считается одним из самых эффективных численных методов решения несимметричных систем. Он гарантирует неувеличение нормы невязки в ходе итерационного процесса, который основан на построении базиса в соответствующей системе подпространстве Крылова &amp;lt;math&amp;gt;K_j(A, r_0)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Затем решение уточняется некоторой добавкой, представленной в виде разложения по этому базису.&lt;br /&gt;
&lt;br /&gt;
Метод обобщенных минимальных невязок популярен из-за наличия ряда преимуществ: он ошибкоустойчив, допускает эффективное распараллеливание, не требует нахождения параметра релаксации, обладает суперлинейной скоростью сходимости. Однако в чистом виде для больших систем метод не используется из-за чрезвычайно больших затрат памяти. Зато широкое распространение получила перезапускаемая версия метода, подоразумевающая перезапуск метода каждые m итераций. Уменьшение размерности пространства может привести к стагнации метода – процессу, при котором с каждой следующей итерацией норма невязки уменьшается незначительно, либо не уменьшается вовсе.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Исходные данные: система линейных алгебраических уравнений &amp;lt;math&amp;gt;Ax=b&amp;lt;/math&amp;gt;, где:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A=(a_{ij})&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; вещественная матрица размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;x&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;x^*&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; точное решение системы.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: &amp;lt;math&amp;gt;x^{(s)} - &amp;lt;/math&amp;gt;приближенное решение системы.&lt;br /&gt;
&lt;br /&gt;
====Ортогонализация Арнольди====&lt;br /&gt;
Для построения базиса &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; в подпространстве Крылова в методе GMRES применяется ортогонализация Арнольди.&lt;br /&gt;
&lt;br /&gt;
Формулы метода:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
(h_{i+1,i}v_{i+1}) &amp;amp; = Av_i - \sum_{j = 1}^{i} h_{j,i}v_j, \\&lt;br /&gt;
v_1 &amp;amp;= \frac{r_0}{\parallel r_0 \parallel},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
В матрично-векторных обозначениях соотношение может быть записано как&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
AV_i &amp;amp;= V_i H_i + h_{i+1,i}v_{i+1} e_i^T &amp;amp;=V_{i+1}\overline{H}_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;
V_i &amp;amp;= [v_1|v_2|...|v_i], \overline{H}_i - \end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt; верхняя матрица Хессенберга размерности &amp;lt;math&amp;gt;(i+1)\times i&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; J(y) = \parallel b- A x\parallel = \parallel b- (Ax_0+V_m y)\parallel =\parallel \beta e_1 - \overline{H}_m y \parallel&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;y -&amp;lt;/math&amp;gt; вектор размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вектор &amp;lt;math&amp;gt;x_m&amp;lt;/math&amp;gt; может быть получен как &lt;br /&gt;
&amp;lt;math&amp;gt;x_m = x_0 + V_m y_m&amp;lt;/math&amp;gt;, вектор &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; может найден как решение линейной задачи наименьших квадратов размера &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для решения задачи минимизации приведем матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; к верхнему треугольному виду с помощью вращений Гивенса. На шаге &lt;br /&gt;
&amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; матрица вращения &amp;lt;math&amp;gt;\Omega_i&amp;lt;/math&amp;gt; имеет размеры &amp;lt;math&amp;gt;(m+1)\times (m+1)&amp;lt;/math&amp;gt; и имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\Omega_i= \begin{pmatrix}&lt;br /&gt;
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 \\  &lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt;&lt;br /&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;
===Макроструктура алгоритма===&lt;br /&gt;
&lt;br /&gt;
Наиболее ресурсоемкие операции при выполнении алгоритма:&lt;br /&gt;
&lt;br /&gt;
* Вычисление нормы невязки для задачи &amp;quot;начальных&amp;quot; условий;&lt;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;
1. Выбрать произвольное &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}{\parallel r_0 \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Задать матрицу &amp;lt;math&amp;gt;\overline{H}_m&amp;lt;/math&amp;gt; размерности &amp;lt;math&amp;gt;(m+1)\times m&amp;lt;/math&amp;gt; и всем ее элементам присвоить нулевые значения&lt;br /&gt;
&lt;br /&gt;
3. Для &amp;lt;math&amp;gt;j=1,\dots,m&amp;lt;/math&amp;gt; выполнять:&lt;br /&gt;
&lt;br /&gt;
* для &amp;lt;math&amp;gt;i=1,\dots,j&amp;lt;/math&amp;gt; выполнять: &amp;lt;math&amp;gt;h_{i,j}=(Av_j,v_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;\omega_j=Av_j-\sum_{i=1}^j h_{i,j}v_i&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;h_{j+1,j}={\parallel \omega_j \parallel}&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;v_{j+1}=\frac{\omega_j}{h_{j+1,j}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Вычислить &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel,\ y \in \mathbb{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;
5. Вычислить &amp;lt;math&amp;gt;r_m=b-Ax_m&amp;lt;/math&amp;gt;. Если достигнутая точность удовлетворительна, остановиться.&lt;br /&gt;
&lt;br /&gt;
Иначе принять &amp;lt;math&amp;gt;x_0=x_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;v_1=\frac{r_m}{\parallel r_m \parallel}&amp;lt;/math&amp;gt; и вернуться к пункту 2.&lt;br /&gt;
&lt;br /&gt;
====Решение задачи минимизации невязки====&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;y_m=\arg\min_{y} \parallel \beta e_1 - \overline{H}_my \parallel&amp;lt;/math&amp;gt; необходимо выполнить следующие шаги:&lt;br /&gt;
&lt;br /&gt;
1. Найти &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; матриц вращений Гивенса &amp;lt;math&amp;gt;\Omega_i(c_i,s_i),\ i=1,\dots,m&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(m+1)\times(m+1)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;s_i=\frac{h_{i+1,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c_i=\frac{h_{i,i}}{\sqrt{h_{i,i}^2+h_{i+1,i}^2}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Вычислить &amp;lt;math&amp;gt;\overline{H}_m^{(m)}=\Omega_1\dots\Omega_m\overline{H}_m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\overline{g}_m=\Omega_1\dots\Omega_m\beta e_1&amp;lt;/math&amp;gt;, удалить последнюю строку и последний элемент соответственно и решить СЛАУ с полученной верхнетреугольной матрицей и правой частью. Полученное решение &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt; минимизирует исходный функционал.&lt;br /&gt;
&lt;br /&gt;
===Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для выполнения одной итерации алгоритма необходимо произвести:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;3m+1&amp;lt;/math&amp;gt; делений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;2m+1&amp;lt;/math&amp;gt; вычислений квадратного корня;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{3m+5}{2}n&amp;lt;/math&amp;gt; умножений;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;O(\frac{m^2n^2}{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;v_j&amp;lt;/math&amp;gt; должен быть разбит на блоки равного размера по числу процессов; каждый из процессов при этом хранит соответствующие блоки всех векторов. Обработка вектора решения дублируется на всех процессах.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039;&lt;br /&gt;
* матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n\times n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - начальное приближение;  &lt;br /&gt;
* натуральное число &amp;lt;math&amp;gt;m&amp;lt;&amp;lt;n&amp;lt;/math&amp;gt;, определяющее размерность подпространства Крылова.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039;&lt;br /&gt;
* вектор-столбец &amp;lt;math&amp;gt;x&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;
&lt;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>