<?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=Larisayaryzheva</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=Larisayaryzheva"/>
	<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/Larisayaryzheva"/>
	<updated>2026-10-22T15:38:39Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30287</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30287"/>
		<updated>2025-12-08T20:15:16Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 эффективность масштабирования постепенно снижается:ускорение остаётся заметным, но уже не таким выраженным. Для большого числа процессов (начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время выполнения перестаёт уменьшаться и даже слегка возрастает. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
Реализация демонстрирует хорошую масштабируемость вплоть до десятков процессов, а наблюдаемые ограничения соответствуют теоретическим особенностям параллельного метода сопряжённых градиентов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|thumb|center|800px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана [[Глоссарий#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. При увеличении числа процессов эффективность распараллеливания для обеих матриц монотонно уменьшается, однако характер этого снижения различается. Для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; эффективность падает относительно медленно, тогда как для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt; спад происходит заметно быстрее при больших P. Это связано с тем, что для более крупной задачи выполняется больше итераций метода и, соответственно, больше глобальных операций редукции. Накопление задержек на этих коммуникациях приводит к ускоренному снижению эффективности при больших значениях &lt;br /&gt;
P в сравнении с задачей меньшей размерности.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|thumb|center|700px|Рис.2 Эффективность распараллеливания МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30285</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30285"/>
		<updated>2025-12-08T20:09:46Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 эффективность масштабирования постепенно снижается:ускорение остаётся заметным, но уже не таким выраженным. Для большого числа процессов (начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время выполнения перестаёт уменьшаться и даже слегка возрастает. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
Реализация демонстрирует хорошую масштабируемость вплоть до десятков процессов, а наблюдаемые ограничения соответствуют теоретическим особенностям параллельного метода сопряжённых градиентов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана [[Глоссарий#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. При увеличении числа процессов эффективность распараллеливания для обеих матриц монотонно уменьшается, однако характер этого снижения различается. Для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; эффективность падает относительно медленно, тогда как для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt; спад происходит заметно быстрее при больших P. Это связано с тем, что для более крупной задачи выполняется больше итераций метода и, соответственно, больше глобальных операций редукции. Накопление задержек на этих коммуникациях приводит к ускоренному снижению эффективности при больших значениях &lt;br /&gt;
P в сравнении с задачей меньшей размерности.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30282</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30282"/>
		<updated>2025-12-08T20:01:35Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время работы алгоритма начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана [[Глоссарий#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. При увеличении числа процессов эффективность распараллеливания для обеих матриц монотонно уменьшается, однако характер этого снижения различается. Для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; эффективность падает относительно медленно, тогда как для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt; спад происходит заметно быстрее при больших P. Это связано с тем, что для более крупной задачи выполняется больше итераций метода и, соответственно, больше глобальных операций редукции. Накопление задержек на этих коммуникациях приводит к ускоренному снижению эффективности при больших значениях &lt;br /&gt;
P в сравнении с задачей меньшей размерности.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30281</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30281"/>
		<updated>2025-12-08T20:00:32Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время работы алгоритма начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана [[Глоссарий#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. При увеличении числа процессов эффективность распараллеливания для обеих матриц монотонно уменьшается, однако характер этого снижения различается. Для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; эффективность падает относительно медленно, тогда как для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt; спад происходит заметно быстрее при больших P. Это связано с тем, что для более крупной задачи выполняется больше итераций метода и, соответственно, больше глобальных операций редукции. Накопление задержек на этих коммуникациях приводит к ускоренному снижению эффективности при больших значениях &lt;br /&gt;
P в сравнении с задачей меньшего размерности.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30280</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30280"/>
		<updated>2025-12-08T19:45:48Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время работы алгоритма начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана [[Глоссарий#Эффективность распараллеливания|эффективность распараллеливания]] &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. Эффективность распараллеливания для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; снижается медленнее, чем для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;. Это объясняется меньшим объемом вычислений на процесс и более ранним влиянием задержек на коммуникацию.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30277</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30277"/>
		<updated>2025-12-08T16:50:29Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время работы алгоритма начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана эффективность &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. Эффективность для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; снижается медленнее, чем для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;. Это объясняется меньшим объемом вычислений на процесс и более ранним влиянием задержек на коммуникацию.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30276</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30276"/>
		<updated>2025-12-08T16:50:05Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}&amp;lt;.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а начиная с &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время работы алгоритма начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана эффективность &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. Эффективность для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; снижается медленнее, чем для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;. Это объясняется меньшим объемом вычислений на процесс и более ранним влиянием задержек на коммуникацию.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30275</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30275"/>
		<updated>2025-12-08T16:48:26Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}&amp;lt;.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а при &amp;lt;math&amp;gt;P = 48 и P = 56&amp;lt;/math&amp;gt; (в случае &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;) время начинает возрастать. Это связано с тем, что накладные расходы на коммуникации и глобальные редукции начинают преобладать над вычислительной работой на каждом процессе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 показана эффективность &amp;lt;math&amp;gt;E(N,P)&amp;lt;/math&amp;gt; в зависимости от числа процессов и размеров матрицы. Эффективность для &amp;lt;math&amp;gt;N=2000&amp;lt;/math&amp;gt; снижается медленнее, чем для &amp;lt;math&amp;gt;N=5000&amp;lt;/math&amp;gt;. Это объясняется меньшим объемом вычислений на процесс и более ранним влиянием задержек на коммуникацию.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30274</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30274"/>
		<updated>2025-12-08T16:06:33Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}&amp;lt;.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а при &amp;lt;math&amp;gt;P = 48&amp;lt;/math&amp;gt; время начинает возрастать из-за роста коммуникационных затрат и стоимости глобальных редукций.&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30273</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30273"/>
		<updated>2025-12-08T15:53:02Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}&amp;lt;.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
По результатам при увеличении числа процессов с 1 до 8 время уменьшается почти линейно, что соответствует сильной масштабируемости реализации. При увеличении числа процессов с 16 до 56 время уменьшается не так эффективно, а при &amp;lt;math&amp;gt;P = 56&amp;lt;/math&amp;gt; время начинает возрастать из-за роста коммуникационных затрат и стоимости глобальных редукций.&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис.1 Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис.2 Эффективность МСГ E(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30272</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30272"/>
		<updated>2025-12-08T15:39:42Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N \in \{2000, 5000\}&amp;lt;.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|700px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис. 2. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_time_surface_new.png&amp;diff=30271</id>
		<title>Файл:Cg time surface new.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_time_surface_new.png&amp;diff=30271"/>
		<updated>2025-12-08T15:33:27Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30270</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30270"/>
		<updated>2025-12-08T15:26:41Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.  &lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30269</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30269"/>
		<updated>2025-12-08T15:25:07Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|700px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30268</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30268"/>
		<updated>2025-12-08T15:24:38Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg eff surface new.png|thumb|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30264</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30264"/>
		<updated>2025-12-08T14:20:29Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg_time_surface_new.png|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30263</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30263"/>
		<updated>2025-12-08T14:18:37Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30261</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30261"/>
		<updated>2025-12-08T14:15:38Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface new.png|300px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30259</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30259"/>
		<updated>2025-12-08T14:11:13Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface.png|300px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
[[Файл:Cg time surface new.png|300px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_eff_surface_new.png&amp;diff=30257</id>
		<title>Файл:Cg eff surface new.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_eff_surface_new.png&amp;diff=30257"/>
		<updated>2025-12-08T14:10:18Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рис. 2. График зависимости параллельной эффективности алгоритма E(N,P) от числа процессов P и размеров матрицы N.&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30249</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30249"/>
		<updated>2025-12-08T13:45:12Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface.png|300px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30247</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30247"/>
		<updated>2025-12-08T13:44:19Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface.png|thumb|300px|Рис. 1. Зависимость времени работы МСГ T(N,P) от числа процессов P и размера матрицы N.]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30244</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30244"/>
		<updated>2025-12-08T13:42:02Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
На рис.1 представлен график зависимости времени работы алгоритма &amp;lt;math&amp;gt;T(N,P)&amp;lt;/math&amp;gt; от числа процессов и размеров матрицы.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:Cg time surface.png]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30239</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30239"/>
		<updated>2025-12-08T13:28:02Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot; для задач размерности &amp;lt;math&amp;gt; N = 2000, N = 5000.&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Число процессов изменялось в диапазоне &amp;lt;math&amp;gt;P \in \{ 1, 2, 4, 8, 16, 32, 48, 56\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[Файл:Cg time surface.png]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30237</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30237"/>
		<updated>2025-12-08T13:21:25Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot;.&lt;br /&gt;
[[Файл:Cg time surface.png]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30236</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30236"/>
		<updated>2025-12-08T13:20:53Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot;.&lt;br /&gt;
[[Файл:Cg time surface.png]обрамить]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30226</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30226"/>
		<updated>2025-12-08T10:34:08Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot;.&lt;br /&gt;
[[Файл:Cg time surface.png]{: width=&amp;quot;500px&amp;quot; height=&amp;quot;300px&amp;quot;}]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_time_surface.png&amp;diff=30224</id>
		<title>Файл:Cg time surface.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cg_time_surface.png&amp;diff=30224"/>
		<updated>2025-12-08T10:26:41Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Параллельная реализация стабилизированного метода сопряжённых градиентов. Изменение производительности в зависимости от числа процессов и размера матрицы.&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30222</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30222"/>
		<updated>2025-12-08T10:08:09Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Исследование масштабируемости реализации метода сопряжённых градиентов проводилось на суперкомпьютере &amp;quot;Ломоносов-2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30221</id>
		<title>Участница:Larisayaryzheva/Программная реализация метода сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%B0%D1%8F_%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30221"/>
		<updated>2025-12-08T09:50:08Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: Новая страница: «== Ссылки == == Локальность данных и вычислений == == Масштабируемость алгоритма и его реализации == == Динамические характеристики и эффективность реализации алгоритма == == Результаты прогонов ==»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ссылки ==&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
== Результаты прогонов ==&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30167</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30167"/>
		<updated>2025-12-06T19:55:15Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаётся параметр остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает рядом особенностей, важных при его практической реализации. Алгоритм включает регулярную последовательность операций, из которых основная вычислительная сложность приходится на вычисление матричного произведения &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Остальные операции имеют координатный параллелизм и могут эффективно вычисляться на параллельных архитектурах. Несмотря на то что последовательная сложность одной итерации составляет &amp;lt;math&amp;gt; O(n^2) &amp;lt;/math&amp;gt;, большая часть вычислений хорошо векторизуется, а редукции, возникающие при подсчёте норм и скалярных произведений, имеют логарифмическую параллельную сложность.&lt;br /&gt;
&lt;br /&gt;
Метод не является детерминированным, поскольку число итераций зависит от структуры матрицы, начального приближения.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Результаты прогонов ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30131</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30131"/>
		<updated>2025-12-05T07:51:35Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаётся параметр остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает рядом особенностей, важных при его практической реализации. Алгоритм включает регулярную последовательность операций, из которых основная вычислительная сложность приходится на вычисление матричного произведения &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Остальные операции имеют координатный параллелизм и могут эффективно вычисляться на параллельных архитектурах. Несмотря на то что последовательная сложность одной итерации составляет &amp;lt;math&amp;gt; O(n^2) &amp;lt;/math&amp;gt;, большая часть вычислений хорошо векторизуется, а редукции, возникающие при подсчёте норм и скалярных произведений, имеют логарифмическую параллельную сложность.&lt;br /&gt;
&lt;br /&gt;
Метод не является детерминированным, поскольку число итераций зависит от структуры матрицы, начального приближения.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30130</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30130"/>
		<updated>2025-12-05T07:48:52Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаётся параметр остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает рядом особенностей, важных при его практической реализации. Алгоритм включает регулярную последовательность операций, из которых основная вычислительная сложность приходится на вычисление матричного произведения &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Остальные операции имеют координатный параллелизм и могут эффективно вычисляться на параллельных архитектурах. Несмотря на то что последовательная сложность одной итерации составляет &amp;lt;math&amp;gt; O(n^2) &amp;lt;/math&amp;gt;, большая часть вычислений хорошо векторизуется, а редукции, возникающие при подсчёте норм и скалярных произведений, имеют логарифмическую параллельную сложность.&lt;br /&gt;
&lt;br /&gt;
Метод не является детерминированным, поскольку число итераций зависит от структуры матрицы, начального приближения.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30129</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30129"/>
		<updated>2025-12-05T07:24:56Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаётся параметр остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30128</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30128"/>
		<updated>2025-12-05T07:23:49Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаются параметры остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и максимальное число итераций &amp;lt;math&amp;gt;k_{\max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30127</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30127"/>
		<updated>2025-12-05T07:20:43Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными метода сопряжённых градиентов являются матрица системы &amp;lt;math&amp;gt;A \in \mathbb{R}^{n \times n}&amp;lt;/math&amp;gt;, вектор правой части &amp;lt;math&amp;gt;b \in \mathbb{R}^n&amp;lt;/math&amp;gt; и начальное приближение решения &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt;. Матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; должна быть симметричной и положительно определённой, что гарантирует сходимость метода и корректность вычисления сопряжённых направлений. В практических задачах матрица может быть как плотной, так и разреженной. Структурные свойства &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (диагональное преобладание, блочная структура) могут дополнительно уменьшать вычислительные затраты и повышать эффективность параллельной реализации.&lt;br /&gt;
&lt;br /&gt;
Вектор правой части &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; и начальное приближение &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; являются плотными векторами размерности &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Начальное приближение может быть выбрано произвольно. На вход также подаются параметры остановки: допустимая погрешность &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и максимальное число итераций &amp;lt;math&amp;gt;k_{\max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма являются приближённое решение системы &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;, последняя невязка &amp;lt;math&amp;gt;r_k = b - A x_k&amp;lt;/math&amp;gt;, число выполненных итераций и значение нормы невязки в момент остановки. При достижении заданной точности &amp;lt;math&amp;gt;\|r_k\| \le \varepsilon\|b\|&amp;lt;/math&amp;gt; метод считается сошедшимся.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30126</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30126"/>
		<updated>2025-12-05T07:12:35Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(\log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\log n) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30125</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30125"/>
		<updated>2025-12-05T07:10:10Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(log\quad n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k\quad log \quad n ) &amp;lt;/math&amp;gt;, где k – число операций, а максимальный потенциальный ресурс параллелизма на одной итерации составляет &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30124</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30124"/>
		<updated>2025-12-05T07:06:35Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов обладает параллельной структурой, так как его вычислительное ядро состоит из операций, которые могут выполняться независимо на элементах векторов или столбцах матрицы. Параллельная сложность алгоритма определяется шириной ярусов его информационного графа - множеством вершин, не имеющих зависимостей между собой. За счёт координатного параллелизма каждый компонент вектора вычисляется независимо, поэтому при размере задачи &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; в один момент времени может быть выполнено &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt; операций, связанных с обновлениями векторов. Наиболее трудоемкой задачей в методе сопряжённых векторов является матричное умножение &amp;lt;math&amp;gt; Ad_{k} &amp;lt;/math&amp;gt;. Данная операция обладает хорошим покоординатным параллелизмом и может быть ускорена. Другим источником параллелизма являются редукции, возникающие при вычислении скалярных произведений и норм векторов. Эти операции имеют сложность &amp;lt;math&amp;gt; O(n) &amp;lt;/math&amp;gt;, но их параллельное время составляет &amp;lt;math&amp;gt; O(log n) &amp;lt;/math&amp;gt;. Последовательные зависимости между итерациями формируют скошенный параллелизм и не позволяют выполнять итерации независимо.&lt;br /&gt;
&lt;br /&gt;
В итоге общая параллельная сложность метода равна &amp;lt;math&amp;gt; O(k logn) &amp;lt;/math&amp;gt;, где k – число операций.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30122</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30122"/>
		<updated>2025-11-29T19:24:31Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30121</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30121"/>
		<updated>2025-11-29T19:15:16Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_{k+1} &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30120</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30120"/>
		<updated>2025-11-29T19:13:44Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_k+1 &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_{k+1} &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_{k+1} &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30119</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30119"/>
		<updated>2025-11-29T19:12:26Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения &amp;lt;math&amp;gt; q = Ad_k &amp;lt;/math&amp;gt;, вычислению коэффициентов &amp;lt;math&amp;gt; α_k &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; β_k &amp;lt;/math&amp;gt;, обновлению решения &amp;lt;math&amp;gt; x_k+1 &amp;lt;/math&amp;gt;, невязки &amp;lt;math&amp;gt; g_k+1 &amp;lt;/math&amp;gt; и направления &amp;lt;math&amp;gt; d_k+1 &amp;lt;/math&amp;gt;. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления &amp;lt;math&amp;gt; d_k+1 &amp;lt;/math&amp;gt; выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30118</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30118"/>
		<updated>2025-11-29T19:05:29Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Информационный граф метода сопряжённых градиентов отражает последовательность основных макроопераций внутри одной итерации метода и зависимость данных между ними. Вершины графа соответствуют вычислению матрично-векторного произведения q = Adk, вычислению коэффициентов alpha_k и betta_k, обновлению решения x_k+1, невязки g_k+1 и направления d_k+1. Граф имеет ярусно-параллельную структуру: отдельные этапы должны выполняться последовательно, однако операции обновления векторов полностью параллелизуемы по компонентам. Итерации метода образуют цикл: после вычисления d_k+1 выполняется проверка критерия остановки, и при необходимости управление возвращается к вычислению нового матричного произведения.&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30117</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30117"/>
		<updated>2025-11-29T18:53:23Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|900px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30116</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30116"/>
		<updated>2025-11-29T18:52:31Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|700px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30115</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30115"/>
		<updated>2025-11-29T18:50:31Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30114</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30114"/>
		<updated>2025-11-29T18:49:06Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|обрамить]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30113</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30113"/>
		<updated>2025-11-29T18:48:32Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png|мини]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30112</id>
		<title>Участница:Larisayaryzheva/Решение СЛАУ методом сопряжённых градиентов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D1%86%D0%B0:Larisayaryzheva/%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%A1%D0%9B%D0%90%D0%A3_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D1%81%D0%BE%D0%BF%D1%80%D1%8F%D0%B6%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&amp;diff=30112"/>
		<updated>2025-11-29T18:47:29Z</updated>

		<summary type="html">&lt;p&gt;Larisayaryzheva: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Метод сопряжённых градиентов&#039;&#039;&#039; — это итерационный численный метод, предназначенный для решения систем линейных алгебраических уравнений (&#039;&#039;&#039;СЛАУ&#039;&#039;&#039;) вида &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной . Основная идея алгоритма заключается в минимизации квадратичного функционала, соответствующего данной системе.&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Необходимо найти решение &#039;&#039;&#039;СЛАУ&#039;&#039;&#039; &amp;lt;math&amp;gt; Ax = b &amp;lt;/math&amp;gt;, где матрица &amp;lt;math&amp;gt; A &amp;lt;/math&amp;gt; является положительно определённой и симметричной (&amp;lt;math&amp;gt; A^T = A &amp;gt; 0 &amp;lt;/math&amp;gt;).&lt;br /&gt;
Данная задача эквивалентна минимизации следующего функционала &amp;lt;math&amp;gt; f(x) = \frac{1}{2} \langle A x, x \rangle - \langle b, x \rangle &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Классически данная задача решается с помощью итерационного метода спуска: &amp;lt;math&amp;gt; x_{k+1} = x_{k} + α_{k}d_{k} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На каждой итерации выбирается направление спуска &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; и шаг &amp;lt;math&amp;gt;α_{k}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt; – антиградиент &amp;lt;math&amp;gt; f(x) &amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt; \alpha_k = \arg\min_{\alpha \ge 0} f(x_k + \alpha_k d_k)&lt;br /&gt;
= -\frac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}, \quad&lt;br /&gt;
g_k := A x_k - b. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сопряжённые направления&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Главная особенность метода сопряжённых градиентов заключается в выборе направлений &amp;lt;math&amp;gt; d_{k} &amp;lt;/math&amp;gt;, которые являются &#039;&#039;&#039;A-сопряжёнными&#039;&#039;&#039;, то есть удовлетворяют условию: &amp;lt;math&amp;gt; \langle A d_{i}, d_{j} \rangle = 0  &amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Общая схема метода сопряжённых градиентов ====&lt;br /&gt;
1. Пусть даны &amp;lt;math&amp;gt; d_{0},...,d_{k}: \langle A d_{i}, d_{j} \rangle = 0 &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i ≠ j &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;math&amp;gt; d_{k+1} = -g_{k+1} + β_{k}d_{k} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;  g_{k+1} = A x_k - b &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;math&amp;gt; β_{k} &amp;lt;/math&amp;gt; ищем исходя из условий на сопряжённость направлений: &amp;lt;math&amp;gt; 0 = \langle A d_k, d_{k+1} \rangle= -\,\langle A d_k, g_{k+1} \rangle + \beta_k \langle A d_k, d_k \rangle &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; β_k = \frac{\langle A d_k, g_{k+1} \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = -\dfrac{\langle g_k, d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = A x_{k+1} - b&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1}, A d_k \rangle}{\langle A d_k, d_k \rangle}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Оптимизация метода сопряжённых градиентов ====&lt;br /&gt;
Выше приведённая схема метода сопряжённых градиентов включает в себя вычисление двух матрично-векторных произведений за один прогон цикла. Данную неэффективность можно устранить, используя следующие факты:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1.&amp;lt;/math&amp;gt; Метод сопряжённых градиентов построен таким образом, что &amp;lt;math&amp;gt; \langle g_{i}, g_{k+1} \rangle = 0 &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; \langle g_{k+1}, d_{i} \rangle &amp;lt;/math&amp;gt; для &amp;lt;math&amp;gt; i &amp;lt;= k &amp;lt;/math&amp;gt; (это можно проверить по индукции и использовать свойство сопряжённости направлений)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;2.&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; g_{k+1} = Ax_{k+1} - b  = A(x_{k} + α_{k}d_{k}) - b = g_{k} + α_{k}Ad_{k} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда &amp;lt;math&amp;gt; Ad_{k} = α_{k}^{-1}(g_{k+1} - g_{k})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
3. &amp;lt;/math&amp;gt; Значит &amp;lt;br&amp;gt;&amp;lt;math&amp;gt;\beta_k = \dfrac{\langle g_{k+1} - g_k,\; g_{k+1} \rangle}{\langle g_{k+1} - g_k,\; d_k \rangle}= \dfrac{\| g_{k+1} \|^2}{-\langle&lt;br /&gt;
g_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; = \dfrac{\| g_{k+1} \|^2}{-\langle -g_k + \beta_{k-1} d_{k-1},\; g_k \rangle}= \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
4.&amp;lt;/math&amp;gt; Аналогично &amp;lt;math&amp;gt;&lt;br /&gt;
\alpha_k = &lt;br /&gt;
\dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Общая схема эффективного метода сопряжённых градиентов ====&lt;br /&gt;
Теперь можем записать эффективную версию метода сопряжённых градиентов, использующий всего одно матрично-векторное произведение.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background:#f9f9f9; border:2px solid #ccc; width:70%;&amp;quot;&lt;br /&gt;
|+ &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Инициализация:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;math&amp;gt;g_0 = A x_0 - b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;d_0 = -g_0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Цикл:&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;Пока&#039;&#039;&#039; &amp;lt;math&amp;gt;\|g_k\| &amp;gt; \varepsilon \|b\|&amp;lt;/math&amp;gt; &#039;&#039;&#039;выполнять:&#039;&#039;&#039;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 1.\;&amp;lt;/math&amp;gt; Вычисляем шаг  &lt;br /&gt;
::&amp;lt;math&amp;gt;\alpha_k = \dfrac{\| g_k \|^2}{\langle A d_k,\; d_k \rangle}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 2.\;&amp;lt;/math&amp;gt; Обновляем приближение решения  &lt;br /&gt;
::&amp;lt;math&amp;gt;x_{k+1} = x_k + \alpha_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 3.\;&amp;lt;/math&amp;gt; Обновляем невязку  &lt;br /&gt;
::&amp;lt;math&amp;gt;g_{k+1} = g_{k} + α_{k}Ad_{k}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 4.\;&amp;lt;/math&amp;gt; Вычисляем коэффициент  &lt;br /&gt;
::&amp;lt;math&amp;gt;\beta_k = \dfrac{\| g_{k+1} \|^2}{\| g_k \|^2}&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 5.\;&amp;lt;/math&amp;gt; Обновляем направление  &lt;br /&gt;
::&amp;lt;math&amp;gt;d_{k+1} = -g_{k+1} + \beta_k d_k&amp;lt;/math&amp;gt;  &lt;br /&gt;
:&amp;lt;math&amp;gt;\quad 6.\;&amp;lt;/math&amp;gt; Увеличиваем счётчик  &lt;br /&gt;
::&amp;lt;math&amp;gt;k = k + 1&amp;lt;/math&amp;gt;  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Результат:&#039;&#039;&#039; &amp;lt;math&amp;gt;x_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро метода сопряжённых градиентов включает в себя выполнение одной матрично-векторной операции, вычисление скалярных произведений, а также векторных обновлений на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма === &lt;br /&gt;
Алгоритм метода сопряжённых градиентов представляет собой итерационный процесс, включающий следующие макрооперации:&lt;br /&gt;
&lt;br /&gt;
1. Вычисление невязки текущего приближения  &lt;br /&gt;
&lt;br /&gt;
2. Вычисление матрично-векторного произведения&lt;br /&gt;
&lt;br /&gt;
3. Вычисление скалярных произведений и норм векторов&lt;br /&gt;
&lt;br /&gt;
4. Обновление текущего приближения и направлений поиска&lt;br /&gt;
&lt;br /&gt;
5. Проверка условия останова&lt;br /&gt;
&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;n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; операций сложения: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Скалярное произведение двух векторов требует &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисление нормы вектора &amp;lt;math&amp;gt;\|a\|&amp;lt;/math&amp;gt; эквивалентно вычислению скалярного произведения &amp;lt;math&amp;gt;\langle a, a\rangle&amp;lt;/math&amp;gt; с последующим извлечением корня: сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Матрично-векторное произведение &amp;lt;math&amp;gt;A x&amp;lt;/math&amp;gt; для плотной матрицы размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt; требует &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; сложений: сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Так как на каждой итерации алгоритма выполняется ровно одно матрично-векторное произведение &amp;lt;math&amp;gt;A d_k&amp;lt;/math&amp;gt;, а остальные операции имеют линейную сложность &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, общая стоимость одной итерации определяется наиболее дорогой операцией: &amp;lt;math&amp;gt;O(n^2).&amp;lt;/math&amp;gt;&lt;br /&gt;
Следовательно, последовательная сложность метода при &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итерациях составляет: &amp;lt;math&amp;gt;O(k n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф итерации метода сопряжённых градиентов.png]]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
Метод сопряжённых градиентов // BaseGroup Labs. https://basegroup.ru/community/articles/conjugate&lt;br /&gt;
&lt;br /&gt;
Метод сопряжённых градиентов (дополнительный материал к курсу «Методы оптимизации»).&lt;br /&gt;
ВМК, 2018. http://www.machinelearning.ru/wiki/images/4/4d/MOMO18_Extra3.pdf&lt;/div&gt;</summary>
		<author><name>Larisayaryzheva</name></author>
	</entry>
</feed>