<?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=AntonChupin</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=AntonChupin"/>
	<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/AntonChupin"/>
	<updated>2026-10-22T14:55:58Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:ASA&amp;diff=28522</id>
		<title>Обсуждение участника:ASA</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:ASA&amp;diff=28522"/>
		<updated>2021-04-07T11:55:01Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Запрос ==&lt;br /&gt;
Здравствуйте, можно мне повышенные права (хотя бы патрулирующего, но потяну и администратора)? Я редактирую Алговики давно и сам использую её в своей работе, хотел бы присматривать за качеством на более высоком уровне. --[[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:55, 7 апреля 2021 (MSK)&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8&amp;diff=28521</id>
		<title>Категория:Незаконченные статьи</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D0%B7%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8&amp;diff=28521"/>
		<updated>2021-04-07T11:46:32Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Статьи по готовности»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Статьи по готовности]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28520</id>
		<title>Шаблон:Project internals nav</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28520"/>
		<updated>2021-04-07T11:46:06Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: лучше так&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{blue box|{{PAGENAME}}|2=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{(}}{{!}} border=0 cellspacing=10em&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}} width=100% align=center {{!}} {{#switch: {{PAGENAME}} | Общий форум = Обсуждение любых связанных с Алговики тем. | Технический форум = Обсуждение технических вопросов, связанных с работой Алговики. | Справка = Помощь в редактировании статей, а также правила и руководства проекта Алговики.}}&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-size: 90%; text-align:center;&amp;quot; {{!}}&lt;br /&gt;
----&lt;br /&gt;
[[Алговики:Общий форум{{!}}Общий форум]] {{!}} [[Алговики:Технический форум{{!}}Технический форум]] {{!}} [[Алговики:Справка{{!}}Справка]]&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;[[Категория:Algowiki:Служебные]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Категория:Algowiki:Шаблоны]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=28519</id>
		<title>Алговики:Общий форум</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=28519"/>
		<updated>2021-04-07T11:44:57Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: пара вопросов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project internals nav}}&lt;br /&gt;
== Капча ==&lt;br /&gt;
При редактировании многих страниц появляется капча, иногда по несколько раз одновременно, что отнимает довольно много сил и времени. Можно с этим что-то сделать? Может, есть какой-то уровень участника, к которому не применяются данные меры (см. также заявку ниже)? [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:44, 7 апреля 2021 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Права ==&lt;br /&gt;
Где можно подать заявку на флаг патрулирующего? [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:44, 7 апреля 2021 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Обустраивание проекта ==&lt;br /&gt;
Админы, скопируйте пожалуйста [https://ru.wikipedia.org/wiki/MediaWiki:Edittools] в [[MediaWiki:Edittools]] - удобнее работать с текстом будет. [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:03, 8 июля 2016 (MSK)&lt;br /&gt;
: Сделано. — [[S:Contributions/Lineprinter|lineprinter]] 11:13, 1 ноября 2016 (MSK)&lt;br /&gt;
&lt;br /&gt;
А можно подключить гаджеты? В частности, HotCat и CategoryTree для удобной работы с категориями.  [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 12:28, 6 сентября 2019 (MSK)&lt;br /&gt;
: Вопрос повторяю. [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:44, 7 апреля 2021 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Список описаний алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
{{:Список описаний алгоритмов}}&lt;br /&gt;
&lt;br /&gt;
== Словарик ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Русский&lt;br /&gt;
!English&lt;br /&gt;
|-&lt;br /&gt;
|алгоритм&lt;br /&gt;
|algorithm&lt;br /&gt;
|-&lt;br /&gt;
|вершина (графа)&lt;br /&gt;
|vertex&lt;br /&gt;
|-&lt;br /&gt;
|входные/выходные данные&lt;br /&gt;
|input/output data&lt;br /&gt;
|-&lt;br /&gt;
|вычислительная мощность&lt;br /&gt;
|computational power&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (алгоритма)&lt;br /&gt;
|computational kernel&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (процессора)&lt;br /&gt;
|computational core&lt;br /&gt;
|-&lt;br /&gt;
|вычислительный узел&lt;br /&gt;
|computational node&lt;br /&gt;
|-&lt;br /&gt;
|граф алгоритма&lt;br /&gt;
|algorithm graph&lt;br /&gt;
|-&lt;br /&gt;
|дуга (графа)&lt;br /&gt;
|edge&lt;br /&gt;
|-&lt;br /&gt;
|избыточные вычисления &lt;br /&gt;
|redundant computation&lt;br /&gt;
|-&lt;br /&gt;
|информационный граф&lt;br /&gt;
|information graph&lt;br /&gt;
|-&lt;br /&gt;
|каноническая ярусно-параллельная форма&lt;br /&gt;
|canonical parallel form&lt;br /&gt;
|-&lt;br /&gt;
|кэш-строка (строка кэш-памяти)&lt;br /&gt;
|cache line&lt;br /&gt;
|-&lt;br /&gt;
|локальность&lt;br /&gt;
|locality&lt;br /&gt;
|-&lt;br /&gt;
|макроструктура&lt;br /&gt;
|macro structure&lt;br /&gt;
|-&lt;br /&gt;
|масштабируемость&lt;br /&gt;
|scalability&lt;br /&gt;
|-&lt;br /&gt;
|метод сдваивания&lt;br /&gt;
|pairwise summation&lt;br /&gt;
|-&lt;br /&gt;
|накладные расходы&lt;br /&gt;
|overhead&lt;br /&gt;
|-&lt;br /&gt;
|параллельная сложность&lt;br /&gt;
|parallel complexity&lt;br /&gt;
|-&lt;br /&gt;
|последовательный (алгоритм, программа)&lt;br /&gt;
|serial (sequential)&lt;br /&gt;
|-&lt;br /&gt;
|последовательная сложность&lt;br /&gt;
|serial complexity&lt;br /&gt;
|-&lt;br /&gt;
|производительность&lt;br /&gt;
|performance&lt;br /&gt;
|-&lt;br /&gt;
|реализация&lt;br /&gt;
|implementation&lt;br /&gt;
|-&lt;br /&gt;
|ресурс параллелизма&lt;br /&gt;
|parallelism resource&lt;br /&gt;
|-&lt;br /&gt;
|сопроцессор&lt;br /&gt;
|co-processor&lt;br /&gt;
|-&lt;br /&gt;
|ускорение&lt;br /&gt;
|speedup&lt;br /&gt;
|-&lt;br /&gt;
|ускоритель&lt;br /&gt;
|accelerator&lt;br /&gt;
|-&lt;br /&gt;
|функциональное устройство&lt;br /&gt;
|functional unit&lt;br /&gt;
|-&lt;br /&gt;
|цикл (программы)&lt;br /&gt;
|loop&lt;br /&gt;
|-&lt;br /&gt;
|эффективность&lt;br /&gt;
|efficiency&lt;br /&gt;
|-&lt;br /&gt;
|ярус&lt;br /&gt;
|layer&lt;br /&gt;
|-&lt;br /&gt;
|ярусно-параллельная форма&lt;br /&gt;
|parallel form&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28518</id>
		<title>Категория:Криптографические алгоритмы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28518"/>
		<updated>2021-04-07T11:40:37Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Алгоритмы»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Алгоритмы]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%95%D0%9C-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=28517</id>
		<title>Категория:ЕМ-алгоритм</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%95%D0%9C-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=28517"/>
		<updated>2021-04-07T11:40:25Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Алгоритмы»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Алгоритмы]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/%D0%9F%D1%80%D0%B5%D0%BF%D0%BE%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_2&amp;diff=28516</id>
		<title>Категория:Assignments/Done/Преподаватель 2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/%D0%9F%D1%80%D0%B5%D0%BF%D0%BE%D0%B4%D0%B0%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_2&amp;diff=28516"/>
		<updated>2021-04-07T11:38:46Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=QR-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC,_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D0%B2_SCALAPACK&amp;diff=28515</id>
		<title>QR-алгоритм, используемый в SCALAPACK</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=QR-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC,_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D0%B2_SCALAPACK&amp;diff=28515"/>
		<updated>2021-04-07T11:37:34Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{level-a}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;QR-алгоритм, используемый в SCALAPACK&#039;&#039;&#039; - алгоритм, использующий все проверенные на настоящее время приёмы ускорения [[QR-алгоритм|QR-алгоритма]] для несимметричных &#039;&#039;вещественных&#039;&#039; матриц&amp;lt;ref&amp;gt;Алгоритм для неэрмитовых комплексных матриц в SCALAPACK отсутствует, есть только их приведение к хессенберговой форме&amp;lt;/ref&amp;gt;. Включён своими частями в разные подпрограммы пакета SCALAPACK&amp;lt;ref name=&amp;quot;SCALAEig&amp;quot;&amp;gt;http://www.netlib.org/scalapack/slug/node63.html#SECTION04335100000000000000&amp;lt;/ref&amp;gt;. Состоит из двух основных частей: [[Метод Хаусхолдера (отражений) приведения матрицы к хессенберговой (почти треугольной) форме|ортогонально подобного приведения матрицы к хессенберговому виду]] и [[QR-алгоритм для хессенберговой матрицы, используемый в SCALAPACK|QR-итераций со сдвигами для хессенберговой матрицы]]. &lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Суть базового QR-алгоритма заключается в итерационном приведении матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; к некоторой унитарно подобной ей матрице &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; при помощи QR-разложения. Матрица &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; является правой верхней треугольной (или блочно треугольной) матрицей, а значит ее диагональ содержит собственные значения (в блочном случае собственные значения матрицы являются собственными значениями диагональных блоков). В силу подобия матриц &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; их наборы собственных значений совпадают. Таким образом, задача поиска собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; сводится к задаче выведения матрицы &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; и поиска собственных значений для нее.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание ==&lt;br /&gt;
&lt;br /&gt;
Известно&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;Воеводин В.В. Вычислительные основы линейной алгебры. М.: Наука, 1977.&amp;lt;/ref&amp;gt;, что произвольная квадратная матрица может быть представлена в виде произведения унитарной (&#039;&#039;в вещественном случае ортогональной&#039;&#039;) и верхней треугольной матриц. Такое разложение называется [[QR-разложения плотных неособенных матриц|QR-разложением]]. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A_0 = A&amp;lt;/math&amp;gt; — исходная матрица.&lt;br /&gt;
Для &amp;lt;math&amp;gt;k = 0, 1, 2, \ldots&amp;lt;/math&amp;gt; выполняется QR-разложение:&lt;br /&gt;
* &amp;lt;math&amp;gt;A_{k} = Q_kR_k&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; — унитарная (&#039;&#039;ортогональная&#039;&#039;) матрица, &amp;lt;math&amp;gt;R_k&amp;lt;/math&amp;gt; — верхняя треугольная матрица, и затем найденные матрицы перемножаются в обратном порядке:&lt;br /&gt;
* &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k = Q_k^{*}A_{k}Q_k&amp;lt;/math&amp;gt;, то матрицы &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt; унитарно подобны для любого &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Поэтому матрицы &amp;lt;math&amp;gt;A_1, A_2, \ldots&amp;lt;/math&amp;gt; унитарно подобны исходной матрице &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и имеют те же собственные значения.&lt;br /&gt;
&lt;br /&gt;
Существуют доказательства&amp;lt;ref name=&amp;quot;VOLA&amp;quot; /&amp;gt; сходимости получающихся матриц к клеточной правой треугольной матрице с диагональными клетками, размеры которых зависят от размеров канонических ящиков Жордана исходной матрицы. Таким образом, проблема собственных значений матрицы сводится к проблемам собственных значений матриц меньшего размера.&lt;br /&gt;
&lt;br /&gt;
=== Особенности вещественного варианта QR-алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Если вещественная матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; имеет различные вещественные собственные значения, то QR-алгоритм сходится к матрице с верхней треугольной формой, на диагонали которой находятся собственные значения. Однако вещественная матрица может иметь комплексные собственные значения, и тогда алгоритм будет сходиться не к верхней треугольной матрице, а к блочной верхней треугольной матрице, которая на диагонали содержит блоки 1-го и 2-го порядка. Блоки 1-го порядка будут содержать различные вещественные собственные значения, блоки 2-го порядка соответствуют парам комплексных сопряженных собственных значений&amp;lt;ref name = &amp;quot;Dem&amp;quot;&amp;gt; Деммель Д. Вычислительная линейная алгебра. – 2001. - С.261-264. &amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;R. Granat, Bo Kagstrom, D. Kressner &amp;quot;LAPACK Working Note #216: A novel parallel QR algorithm for hybrid distributed memory HPC systems&amp;quot;.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_N=  &lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
 \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp; \bullet\\ &lt;br /&gt;
 0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \ddots&amp;amp; \bullet\\ &lt;br /&gt;
 \vdots&amp;amp;   \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \bullet\\ &lt;br /&gt;
 0&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  0&amp;amp;  0&amp;amp; \blacksquare&lt;br /&gt;
\end{bmatrix}&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;
Хессенбергова (почти треугольная) форма матрицы интересна в приложении к QR-алгоритму тем, что в случае, если &amp;lt;math&amp;gt;A_0 = A&amp;lt;/math&amp;gt; имеет эту форму, то имеют её и все матрицы &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;. Если теперь посмотреть на методы [[QR-разложения плотных неособенных матриц]], то видно, что выполнение разложения &amp;lt;math&amp;gt;A_k = Q_kR_k&amp;lt;/math&amp;gt; в случае плотной неособенной &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;требует (в последовательном варианте) &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt; операций, как и последующий процесс вычисления &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k&amp;lt;/math&amp;gt;. В случае же, если матрицы хессенберговы, то как [[Метод Хаусхолдера (отражений) приведения матрицы к хессенберговой (почти треугольной) форме|QR-разложения плотных хессенберговых матриц]], так и вычисления &amp;lt;math&amp;gt;A_{k+1} = R_kQ_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;
Кроме этого, известно, что в случае, если хессенбергова матрица содержит на нижней кодиагонали только ненулевые элементы, то все кратные собственные значения будут соответствовать одному ящику Жордана&amp;lt;ref name=&amp;quot;VOLA&amp;quot; /&amp;gt;. Это означает, что каждое собственное значение с геометрической кратностью выше 1 даст после точного приведения матрицы к хессенбергову виду нули на нижней кодиагонали, что сразу даёт возможность параллельно работать с несколькими диагональными блоками.&lt;br /&gt;
&lt;br /&gt;
Поэтому начальное [[Метод Хаусхолдера (отражений) приведения матрицы к хессенберговой (почти треугольной) форме|ортогонально подобное приведение матрицы к хессенбергову виду]] является органически необходимой стартовой частью алгоритма&amp;lt;ref name=&amp;quot;SCALAEig&amp;quot; /&amp;gt;, несмотря на то, что оно выделено в пакете SCALAPACK в отдельную подпрограмму.&lt;br /&gt;
&lt;br /&gt;
==== Сдвиги QR-алгоритма ====&lt;br /&gt;
&lt;br /&gt;
QR-алгоритм со сдвигами позволяет сократить количество итераций, необходимых для сходимости&amp;lt;ref name=&amp;quot;bahvalov&amp;quot;&amp;gt;Бахвалов Н.С., Жидков Н.П., Кобельков. Г.М. &amp;quot;Численные методы&amp;quot;— 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;. Пусть у нас есть матрица &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;, тогда процесс перехода к матрице &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt; выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* На каждом шаге подбирается число &amp;lt;math&amp;gt;\nu_k&amp;lt;/math&amp;gt; и ищется следующее QR-разложение: &amp;lt;math&amp;gt;A_k-\nu_kE=Q_kR_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисляется матрица &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k+\nu_kE&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом сохраняется свойство подобия матриц &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_{k+1} = R_kQ_k+\nu_kE=Q_{k}^{T}Q_kR_kQ_k+\nu_kE=Q_{k}^{T}(A_k-\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-Q_{k}^{T}(\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-\nu_kE+\nu_kE=Q_{k}^{T}A_kQ_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подбор параметра &amp;lt;math&amp;gt;\nu_k&amp;lt;/math&amp;gt; в пакете SCALAPACK осуществляется в зависимости от элементов матрицы &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;. При алгоритме подбора параметров, известном, как &#039;&#039;правило Фрэнсиса&#039;&#039;&amp;lt;ref name = &amp;quot;Dem&amp;quot; /&amp;gt;, в качестве сдвигов выбираются для каждого из диагональных блоков собственные значения их нижних правых клеток размером 2х2, и среднее количество итераций для большинства матриц получается порядка 2 на одно собственное значение. Существуют, однако, матрицы, для которых правило Фрэнсиса не даёт сходимости, поэтому если по истечении 10 итераций с обычными сдвигами не получилось сходимости, применяют так называемые &amp;quot;особые сдвиги&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
==== Неявное выполнение сдвигов ====&lt;br /&gt;
&lt;br /&gt;
Чтобы не выполнять итерации в комплексной арифметике, выполняют т.н. неявный двойной сдвиг, давно описанный в литературе&amp;lt;ref name=&amp;quot;VOLA&amp;quot; /&amp;gt;&amp;lt;ref name = &amp;quot;Dem&amp;quot; /&amp;gt;. При этом используются двусторонние подобные операции Хаусхолдера (отражения) 3го порядка. На первом шаге итерации формируют у хессенберговой формы выступ размера 2х2, а на последующих шагах с их же помощью выступ вытесняют вправо вниз. &lt;br /&gt;
&lt;br /&gt;
==== Обнуление поддиагональных элементов (дефляция) и распараллеливание по блокам ====&lt;br /&gt;
&lt;br /&gt;
После того, как под диагональю какой-либо элемент становится менее порогового значения, его можно считать равным нулю. Это даёт возможность применить разделение диагональных блоков матрицы, соседствующих с ним, и раздельное вычисление их собственных чисел. Этот приём называется &#039;&#039;&#039;дефляцией&#039;&#039;&#039;.&lt;br /&gt;
Благодаря обнулению поддиагональных элементов далее нахождение собственных чисел разделённых этими нулями хессенберговых блоков, расположенных на диагонали блочно-треугольной формы, можно производить раздельно. Если в библиотеке LAPACK, предшествующей библиотеке SCALAPACK, на каждой из итераций обрабатывался текущий диагональный блок максимальных размеров, то в алгоритме, используемом в SCALAPACK, все блоки размера больше, чем 3, обрабатываются на очередной итерации параллельно, что позволило ускорить процесс.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&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;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
[[Категория:Алгоритмы для матриц]]&lt;br /&gt;
[[Категория:ScaLaPACK]]&lt;br /&gt;
&lt;br /&gt;
[[en:QR algorithm as implemented in SCALAPACK]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=28514</id>
		<title>Категория:Нейронные сети</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=28514"/>
		<updated>2021-04-07T11:36:42Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=28513</id>
		<title>Категория:Комбинаторная геометрия</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%BE%D0%BC%D0%B1%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=28513"/>
		<updated>2021-04-07T11:36:22Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28512</id>
		<title>Категория:Геометрические алгоритмы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%93%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28512"/>
		<updated>2021-04-07T11:35:51Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: « Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=28511</id>
		<title>Категория:Вычислительная геометрия</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F&amp;diff=28511"/>
		<updated>2021-04-07T11:35:02Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: « Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Chalker&amp;diff=28510</id>
		<title>Категория:Assignments/Done/Chalker</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Chalker&amp;diff=28510"/>
		<updated>2021-04-07T11:34:35Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Evgeny_Mortikov&amp;diff=28509</id>
		<title>Категория:Assignments/Done/Evgeny Mortikov</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Evgeny_Mortikov&amp;diff=28509"/>
		<updated>2021-04-07T11:33:48Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Kronberg&amp;diff=28508</id>
		<title>Категория:Assignments/Done/Kronberg</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Kronberg&amp;diff=28508"/>
		<updated>2021-04-07T11:33:15Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Konshin&amp;diff=28507</id>
		<title>Категория:Assignments/Done/Konshin</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Konshin&amp;diff=28507"/>
		<updated>2021-04-07T11:32:31Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Frolov&amp;diff=28506</id>
		<title>Категория:Assignments/Done/Frolov</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Frolov&amp;diff=28506"/>
		<updated>2021-04-07T11:32:08Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Dexter&amp;diff=28505</id>
		<title>Категория:Assignments/Done/Dexter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done/Dexter&amp;diff=28505"/>
		<updated>2021-04-07T11:31:44Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Assignments/Done»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Assignments/Done]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Pages_with_syntax_highlighting_errors&amp;diff=28504</id>
		<title>Категория:Pages with syntax highlighting errors</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Pages_with_syntax_highlighting_errors&amp;diff=28504"/>
		<updated>2021-04-07T11:31:23Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Algowiki:Служебные»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Algowiki:Служебные]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5&amp;diff=28503</id>
		<title>Категория:Algowiki:Служебные</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5&amp;diff=28503"/>
		<updated>2021-04-07T11:30:00Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Эта категория для страниц и категорий, предназначенных для технического обслуживания А...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта категория для страниц и категорий, предназначенных для технического обслуживания Алговики (не для читателей).&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B&amp;diff=28502</id>
		<title>Категория:Algowiki:Шаблоны</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B&amp;diff=28502"/>
		<updated>2021-04-07T11:29:07Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Эта категория содержит все шаблоны (специальные страницы, которые можно включать в друг...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта категория содержит все шаблоны (специальные страницы, которые можно включать в другие статьи) Алговики.&lt;br /&gt;
&lt;br /&gt;
[https://algowiki-project.org/w/ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%3A%D0%92%D1%81%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B&amp;amp;from=&amp;amp;to=&amp;amp;namespace=10 Автоматический список]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Algowiki:Служебные]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28501</id>
		<title>Шаблон:Project internals nav</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28501"/>
		<updated>2021-04-07T11:27:53Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{blue box|{{PAGENAME}}|2=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{(}}{{!}} border=0 cellspacing=10em&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}} width=100% align=center {{!}} {{#switch: {{PAGENAME}} | Общий форум = Обсуждение любых связанных с Алговики тем. | Технический форум = Обсуждение технических вопросов, связанных с работой Алговики. | Справка = Помощь в редактировании статей, а также правила и руководства проекта Алговики.}}&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-size: 90%; text-align:center;&amp;quot; {{!}}&lt;br /&gt;
----&lt;br /&gt;
[[Алговики:Общий форум{{!}}Общий форум]] {{!}} [[Алговики:Технический форум{{!}}Технический форум]] {{!}} [[Алговики:Справка{{!}}Справка]]&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;[[Категория:Algowiki:Служебное]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Категория:Algowiki:Шаблоны]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B&amp;diff=28500</id>
		<title>Категория:Неустойчивые параллельные методы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9D%D0%B5%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B5_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B&amp;diff=28500"/>
		<updated>2021-04-07T11:24:14Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Неустойчивые параллельные методы&#039;&#039;&#039;, как правило, получены из последовательных устойчивых вычислительных схем с использованием каких-либо свойств, которые выполняются для точной арифметики, но не выполняются в условиях реальных компьютерных ошибок округления, например, ассоциативности и дистрибутивности.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Методы]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B&amp;diff=28499</id>
		<title>Категория:Методы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B&amp;diff=28499"/>
		<updated>2021-04-07T11:23:47Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: « Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2&amp;diff=28498</id>
		<title>Категория:Методы конструирования параллельных алгоритмов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2&amp;diff=28498"/>
		<updated>2021-04-07T11:23:28Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Методы конструирования параллельных алгоритмов&#039;&#039;&#039; - общие приёмы, с помощью которых на основе одних алгоритмов конструируются другие, специально для параллельных вычислительных систем.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Методы]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0&amp;diff=28497</id>
		<title>Категория:Уровень метода</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0&amp;diff=28497"/>
		<updated>2021-04-07T11:22:59Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Уровень метода&#039;&#039;&#039; в категории статьи означает, что в статье описан математический метод решения некоторой задачи. Для этого метода вполне возможно существование разных алгоритмов, реализующих его.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи по уровню|Метод]]&lt;br /&gt;
[[Категория:Методы]]&lt;br /&gt;
&lt;br /&gt;
[[en:Category:Method level]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=28496</id>
		<title>Категория:Задачи</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=28496"/>
		<updated>2021-04-07T11:22:08Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: « Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0&amp;diff=28495</id>
		<title>Категория:Уровень алгоритма</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0&amp;diff=28495"/>
		<updated>2021-04-07T11:21:40Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Уровень алгоритма&#039;&#039;&#039; в категории страницы означает, что на ней описан конкретный алгоритм, реализующий решение задачи некоторым методом.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи по уровню|Алгоритм]]&lt;br /&gt;
[[Категория:Алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[en:Category:Algorithm level]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=28494</id>
		<title>Категория:Уровень задачи</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8&amp;diff=28494"/>
		<updated>2021-04-07T11:21:14Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Уровень задачи&#039;&#039;&#039; в категории означает, что в статье описана задача, которую, возможно, решают несколько методов.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи по уровню|Задача]]&lt;br /&gt;
[[Категория:Задачи]]&lt;br /&gt;
&lt;br /&gt;
[[en:Category:Problem level]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%BF%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8E&amp;diff=28493</id>
		<title>Категория:Статьи по уровню</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%BF%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8E&amp;diff=28493"/>
		<updated>2021-04-07T11:20:46Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: « Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28492</id>
		<title>Шаблон:Project internals nav</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Project_internals_nav&amp;diff=28492"/>
		<updated>2021-04-07T11:19:57Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: автокатегоризация&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{blue box|{{PAGENAME}}|2=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
{{(}}{{!}} border=0 cellspacing=10em&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}} width=100% align=center {{!}} {{#switch: {{PAGENAME}} | Общий форум = Обсуждение любых связанных с Алговики тем. | Технический форум = Обсуждение технических вопросов, связанных с работой Алговики. | Справка = Помощь в редактировании статей, а также правила и руководства проекта Алговики.}}&lt;br /&gt;
{{!}} {{#switch: {{PAGENAME}} | Общий форум = [[File:Group font awesome.svg{{!}}48px]] | Технический форум = [[File:Wrench font awesome.svg{{!}}48px]] | Справка = [[File:Question sign font awesome.svg{{!}}48px]]}}&lt;br /&gt;
{{!}}-&lt;br /&gt;
{{!}} colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-size: 90%; text-align:center;&amp;quot; {{!}}&lt;br /&gt;
----&lt;br /&gt;
[[Алговики:Общий форум{{!}}Общий форум]] {{!}} [[Алговики:Технический форум{{!}}Технический форум]] {{!}} [[Алговики:Справка{{!}}Справка]]&lt;br /&gt;
{{!}}{{)}}&lt;br /&gt;
}}&amp;lt;includeonly&amp;gt;[[Категория:Algowiki:Служебное]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0&amp;diff=28491</id>
		<title>Категория:Уровень алгоритма</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0&amp;diff=28491"/>
		<updated>2021-04-07T11:19:11Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Уровень алгоритма&#039;&#039;&#039; в категории страницы означает, что на ней описан конкретный алгоритм, реализующий решение задачи некоторым методом.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи по уровню]]&lt;br /&gt;
[[Категория:Алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[en:Category:Algorithm level]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%BF%D0%BE_%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=28490</id>
		<title>Категория:Статьи по готовности</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%BF%D0%BE_%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=28490"/>
		<updated>2021-04-07T11:18:21Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Отмена правки 15576, сделанной Lineprinter (обсуждение)но почему?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Подкатегории данной категории используются в шаблоне [[Шаблон:Main page/Readiness|Main page/Readiness]].&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;br /&gt;
&lt;br /&gt;
[[en:Category:Articles by readiness]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2&amp;diff=28489</id>
		<title>Категория:Методы конструирования параллельных алгоритмов</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BA%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2&amp;diff=28489"/>
		<updated>2021-04-07T11:17:47Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Методы конструирования параллельных алгоритмов&#039;&#039;&#039; - общие приёмы, с помощью которых на основе одних алгоритмов конструируются другие, специально для параллельных вычислительных систем.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=28488</id>
		<title>Алговики:Общий форум</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=28488"/>
		<updated>2021-04-07T11:15:09Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project internals nav}}&lt;br /&gt;
== Обустраивание проекта ==&lt;br /&gt;
Админы, скопируйте пожалуйста [https://ru.wikipedia.org/wiki/MediaWiki:Edittools] в [[MediaWiki:Edittools]] - удобнее работать с текстом будет. [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:03, 8 июля 2016 (MSK)&lt;br /&gt;
: Сделано. — [[S:Contributions/Lineprinter|lineprinter]] 11:13, 1 ноября 2016 (MSK)&lt;br /&gt;
&lt;br /&gt;
А можно подключить гаджеты? В частности, HotCat и CategoryTree для удобной работы с категориями.  [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 12:28, 6 сентября 2019 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Список описаний алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
{{:Список описаний алгоритмов}}&lt;br /&gt;
&lt;br /&gt;
== Словарик ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Русский&lt;br /&gt;
!English&lt;br /&gt;
|-&lt;br /&gt;
|алгоритм&lt;br /&gt;
|algorithm&lt;br /&gt;
|-&lt;br /&gt;
|вершина (графа)&lt;br /&gt;
|vertex&lt;br /&gt;
|-&lt;br /&gt;
|входные/выходные данные&lt;br /&gt;
|input/output data&lt;br /&gt;
|-&lt;br /&gt;
|вычислительная мощность&lt;br /&gt;
|computational power&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (алгоритма)&lt;br /&gt;
|computational kernel&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (процессора)&lt;br /&gt;
|computational core&lt;br /&gt;
|-&lt;br /&gt;
|вычислительный узел&lt;br /&gt;
|computational node&lt;br /&gt;
|-&lt;br /&gt;
|граф алгоритма&lt;br /&gt;
|algorithm graph&lt;br /&gt;
|-&lt;br /&gt;
|дуга (графа)&lt;br /&gt;
|edge&lt;br /&gt;
|-&lt;br /&gt;
|избыточные вычисления &lt;br /&gt;
|redundant computation&lt;br /&gt;
|-&lt;br /&gt;
|информационный граф&lt;br /&gt;
|information graph&lt;br /&gt;
|-&lt;br /&gt;
|каноническая ярусно-параллельная форма&lt;br /&gt;
|canonical parallel form&lt;br /&gt;
|-&lt;br /&gt;
|кэш-строка (строка кэш-памяти)&lt;br /&gt;
|cache line&lt;br /&gt;
|-&lt;br /&gt;
|локальность&lt;br /&gt;
|locality&lt;br /&gt;
|-&lt;br /&gt;
|макроструктура&lt;br /&gt;
|macro structure&lt;br /&gt;
|-&lt;br /&gt;
|масштабируемость&lt;br /&gt;
|scalability&lt;br /&gt;
|-&lt;br /&gt;
|метод сдваивания&lt;br /&gt;
|pairwise summation&lt;br /&gt;
|-&lt;br /&gt;
|накладные расходы&lt;br /&gt;
|overhead&lt;br /&gt;
|-&lt;br /&gt;
|параллельная сложность&lt;br /&gt;
|parallel complexity&lt;br /&gt;
|-&lt;br /&gt;
|последовательный (алгоритм, программа)&lt;br /&gt;
|serial (sequential)&lt;br /&gt;
|-&lt;br /&gt;
|последовательная сложность&lt;br /&gt;
|serial complexity&lt;br /&gt;
|-&lt;br /&gt;
|производительность&lt;br /&gt;
|performance&lt;br /&gt;
|-&lt;br /&gt;
|реализация&lt;br /&gt;
|implementation&lt;br /&gt;
|-&lt;br /&gt;
|ресурс параллелизма&lt;br /&gt;
|parallelism resource&lt;br /&gt;
|-&lt;br /&gt;
|сопроцессор&lt;br /&gt;
|co-processor&lt;br /&gt;
|-&lt;br /&gt;
|ускорение&lt;br /&gt;
|speedup&lt;br /&gt;
|-&lt;br /&gt;
|ускоритель&lt;br /&gt;
|accelerator&lt;br /&gt;
|-&lt;br /&gt;
|функциональное устройство&lt;br /&gt;
|functional unit&lt;br /&gt;
|-&lt;br /&gt;
|цикл (программы)&lt;br /&gt;
|loop&lt;br /&gt;
|-&lt;br /&gt;
|эффективность&lt;br /&gt;
|efficiency&lt;br /&gt;
|-&lt;br /&gt;
|ярус&lt;br /&gt;
|layer&lt;br /&gt;
|-&lt;br /&gt;
|ярусно-параллельная форма&lt;br /&gt;
|parallel form&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BD%D0%B0_%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA&amp;diff=28487</id>
		<title>Категория:Законченные статьи без перевода на английский язык</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%97%D0%B0%D0%BA%D0%BE%D0%BD%D1%87%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BD%D0%B0_%D0%B0%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA&amp;diff=28487"/>
		<updated>2021-04-07T11:14:06Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рабочая категория для редакторов, объединяет статьи, которые готовы к переводу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28486</id>
		<title>Категория:Алгоритмы</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B&amp;diff=28486"/>
		<updated>2021-04-07T11:13:51Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Отмена правки 15589, сделанной Lineprinter (обсуждение)нужно&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Formal&amp;diff=28485</id>
		<title>Категория:Assignments/Formal</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Formal&amp;diff=28485"/>
		<updated>2021-04-07T11:13:26Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Задания, прошедшие предварительную проверку&lt;br /&gt;
&lt;br /&gt;
[[Категория:Assignments]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done&amp;diff=28484</id>
		<title>Категория:Assignments/Done</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Done&amp;diff=28484"/>
		<updated>2021-04-07T11:13:11Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Готовые студенческие задания&lt;br /&gt;
&lt;br /&gt;
[[Категория:Assignments]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments&amp;diff=28483</id>
		<title>Категория:Assignments</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments&amp;diff=28483"/>
		<updated>2021-04-07T11:11:28Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Новая страница: «Категория:Всё»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&amp;diff=28482</id>
		<title>Категория:Algowiki:Справка</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Algowiki:%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0&amp;diff=28482"/>
		<updated>2021-04-07T11:11:12Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: Отмена правки 15588, сделанной Lineprinter (обсуждение)почему нет?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Всё]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Awaiting&amp;diff=28481</id>
		<title>Категория:Assignments/Awaiting</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Assignments/Awaiting&amp;diff=28481"/>
		<updated>2021-04-07T11:10:42Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Задания, ожидающие проверки&lt;br /&gt;
&lt;br /&gt;
[[Категория:Assignments]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D1%81%D1%91&amp;diff=28480</id>
		<title>Категория:Всё</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D1%81%D1%91&amp;diff=28480"/>
		<updated>2021-04-07T11:10:18Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: нужна какая-то всё равно&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта категория служит как корневая для всех категорий и страниц.&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=QR-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=28479</id>
		<title>QR-алгоритм</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=QR-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC&amp;diff=28479"/>
		<updated>2021-04-07T08:55:16Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{level-m}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания: [[Участник:Смирнова_Александра|Смирнова А.С.]] ([[QR-алгоритм#Математическое описание|Раздел 2]]), [[Участник:Frolov|Фролов А.В.]] (общая редактура и правка)&lt;br /&gt;
&lt;br /&gt;
[[Спектральное разложение (нахождение собственных значений и векторов)|Задача нахождения собственных значений и собственных векторов]] для матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; заключается в поиске таких соответствующих друг другу чисел &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; и &#039;&#039;ненулевых&#039;&#039; векторов &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, которые удовлетворяют уравнению &amp;lt;math style=&amp;quot;vertical-align:0%&amp;quot;&amp;gt;Ax=\lambda x&amp;lt;/math&amp;gt;, при этом числа &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; называются собственными значениями, а вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - собственными векторами&amp;lt;ref&amp;gt;В.В.Воеводин, Ю.А.Кузнецов. Матрицы и вычисления. М.: Наука, 1984.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Данная задача является одной из самых сложных задач линейной алгебры&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;Воеводин В.В. Вычислительные основы линейной алгебры. М.: Наука, 1977.&amp;lt;/ref&amp;gt;. Собственные вектора и собственные значения применяются в различных областях науки: в аналитической геометрии, при решении систем интегральных уравнений, в математической физике. Однако не существует прямых методов вычисления собственных значений для матриц общего вида, поэтому данная задача на практике решается численными итерационными методами. Одним из них является &#039;&#039;&#039;QR-алгоритм&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Общее описание метода ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;QR-алгоритм&#039;&#039;&#039; — это численный &#039;&#039;&#039;метод&#039;&#039;&#039; в линейной алгебре, предназначенный для решения полной проблемы собственных значений, то есть отыскания всех собственных чисел матрицы. При этом QR-алгоритм позволяет найти сразу и собственные вектора матрицы. Он был разработан в конце 1950-х годов независимо В.Н. Кублановской(Россия)&amp;lt;ref&amp;gt;Кублановская В.Н. О некоторых алгоритмах для решения полной проблемы собственных значений // Ж. вычисл.&lt;br /&gt;
матем. и матем. физ. 1961. Т. 1. № 4. С. 555–570&amp;lt;/ref&amp;gt; и Дж. Фрэнсисом(Англия)&amp;lt;ref&amp;gt;J.G.F. Francis, &amp;quot;The QR Transformation, I&amp;quot;, &#039;&#039;The Computer Journal&#039;&#039;, 1961, vol. 4, no. 3, pp. 265-271&amp;lt;/ref&amp;gt;. Открытию QR-алгоритма предшествовал LR-алгоритм, который использовал LU-разложение вместо QR-разложения. В настоящее время LR-алгоритм используется очень редко ввиду своей меньшей эффективности, однако он был важным шагом на пути к открытию QR-алгоритма&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/QR_algorithm Wikipedia: QR-algorithm]&amp;lt;/ref&amp;gt;. В настоящее время под QR-алгоритмом понимается не только исходно разработанный В.Н.Кублановской и Дж. Фрэнсисом алгоритм, но и всю совокупность более поздних приёмов его ускорения.&lt;br /&gt;
&lt;br /&gt;
Суть базового QR-алгоритма заключается в итерационном приведении матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; к некоторой унитарно подобной ей матрице &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; при помощи QR-разложения. Матрица &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; является правой верхней треугольной матрицей, а значит ее диагональ содержит собственные значения. В силу подобия матриц &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; их наборы собственных значений совпадают. Таким образом задача поиска собственных значений матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; сводится к задаче выведения матрицы &amp;lt;math&amp;gt;A_N&amp;lt;/math&amp;gt; и поиска собственных значений для нее, что является тривиальной задачей.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание базового метода ==&lt;br /&gt;
&lt;br /&gt;
Известно, что произвольная квадратная матрица может быть представлена в виде произведения унитарной (&#039;&#039;в вещественном случае ортогональной&#039;&#039;) и верхней треугольной матриц. Такое разложение называется [[QR-разложения плотных неособенных матриц|QR-разложением]]. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A_0 = A&amp;lt;/math&amp;gt; — исходная матрица.&lt;br /&gt;
Для &amp;lt;math&amp;gt;k = 0, 1, 2, \ldots&amp;lt;/math&amp;gt; выполняется QR-разложение:&lt;br /&gt;
* &amp;lt;math&amp;gt;A_{k} = Q_kR_k&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; — унитарная (&#039;&#039;ортогональная&#039;&#039;) матрица, &amp;lt;math&amp;gt;R_k&amp;lt;/math&amp;gt; — верхняя треугольная матрица, и затем найденные матрицы перемножаются в обратном порядке:&lt;br /&gt;
* &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k = Q_k^{*}A_{k}Q_k&amp;lt;/math&amp;gt;, то матрицы &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt; унитарно подобны для любого &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Поэтому матрицы &amp;lt;math&amp;gt;A_1, A_2, \ldots&amp;lt;/math&amp;gt; унитарно подобны исходной матрице &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и имеют те же собственные значения.&lt;br /&gt;
&lt;br /&gt;
В специальной литературе по численным методам приводится доказательство&amp;lt;ref name=&amp;quot;VOLA&amp;quot; /&amp;gt; сходимости получающихся матриц к клеточной правой треугольной матрице с диагональными клетками, размеры которых зависят от размеров канонических ящиков Жордана исходной матрицы. Таким образом, проблема собственных значений матрицы сводится к проблемам собственных значений матриц меньшего размера. QR-алгоритм в узком смысле и есть эта процедура. Однако обычно к нему относят не только её, но и весь комплекс приёмов ускорения этого итерационного метода. &lt;br /&gt;
&lt;br /&gt;
=== Особенности вещественного несимметричного варианта QR-алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Если вещественная матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; имеет различные вещественные собственные значения, то, как было описано ранее, QR-алгоритм сходится к матрице с верхней треугольной формой, на диагонали которой находятся собственные значения. Однако вещественная матрица может иметь комплексные собственные значения. В данном случае алгоритм будет сходиться не к верхней треугольной матрице, а к блочной верхней треугольной матрице, которая на диагонали содержит блоки 1-го и 2-го порядка. Блоки 1-го порядка содержат различные вещественные собственные значения, блоки 2-го порядка соответствуют парам комплексных сопряженных собственных значений&amp;lt;ref name = &amp;quot;Dem&amp;quot;&amp;gt; Деммель Д. Вычислительная линейная алгебра. – 2001. - С.261-264. &amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_N=  &lt;br /&gt;
\begin{bmatrix}&lt;br /&gt;
 \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp; \bullet\\ &lt;br /&gt;
 0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \bullet&amp;amp;  \bullet&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \ddots&amp;amp; \vdots\\ &lt;br /&gt;
 \vdots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  0&amp;amp;  \blacksquare&amp;amp;  \blacksquare&amp;amp;  \ddots&amp;amp; \bullet\\ &lt;br /&gt;
 \vdots&amp;amp;   \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp;  \ddots&amp;amp; \bullet\\ &lt;br /&gt;
 0&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  \cdots&amp;amp;  0&amp;amp;  0&amp;amp; \blacksquare&lt;br /&gt;
\end{bmatrix}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Надо сказать, что при применении QR-алгоритма к симметричным матрицам такой проблемы не возникает, поскольку у них нет комплексных собственных значений. Кроме этого, приведение к хессенберговой форме в силу симметрии автоматически даст трёхдиагональную форму и, как следствие, линейную сложность одной итерации, что существенно ускоряет исполнение в сравнении с матрицами общего вида. В существующих пакетах программ для того, чтобы не выполнять итерации в комплексной арифметике, выполняют т.н. неявный двойной сдвиг&amp;lt;ref name = &amp;quot;Dem&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ускорение сходимости QR-алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Применение приёмов ускорения даёт QR-алгоритму существенные преимущества перед альтернативными методами решения проблемы собственных значений. Приёмы делятся по своей сути на две группы - приёмы ускорения одной итерации алгоритма и приёмы ускорения сходимости итерационного процесса, то есть уменьшения числа итераций. &lt;br /&gt;
&lt;br /&gt;
=== Использование хессенберговой формы матрицы ===&lt;br /&gt;
&lt;br /&gt;
Хессенбергова (почти треугольная) форма матрицы интересна в приложении к QR-алгоритму тем, что в случае, если &amp;lt;math&amp;gt;A_0 = A&amp;lt;/math&amp;gt; имеет эту форму, то имеют её и все матрицы &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;. Если теперь посмотреть на методы [[QR-разложения плотных неособенных матриц]], то видно, что выполнение разложения &amp;lt;math&amp;gt;A_k = Q_kR_k&amp;lt;/math&amp;gt; в случае плотной неособенной &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;требует (в последовательном варианте) &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt; операций, как и последующий процесс вычисления &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k&amp;lt;/math&amp;gt;. В случае же, если матрицы хессенберговы, то как [[Методы QR-разложения плотных хессенберговых матриц|QR-разложения плотных хессенберговых матриц]], так и вычисления &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k&amp;lt;/math&amp;gt; потребуют уже по &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; операций. Это позволяет экономить если не время (критические пути графа алгоритма линейны для лучших методов QR-разложения и для плотной матрицы, и для хессенберговой), то довольно большие вычислительные ресурсы. &lt;br /&gt;
&lt;br /&gt;
Поэтому естественным приёмом ускорения итераций QR-алгоритма является начальное [[Разложения, содержащие хессенбергову матрицу, унитарно подобную исходной|унитарно подобное приведение матрицы к хессенбергову виду]]. После этого все процедуры QR-алгоритма следует проводить уже с матрицами хессенберговой формы.&lt;br /&gt;
&lt;br /&gt;
В случае, если исходная матрица эрмитова (в вещественном случае - симметричная), то унитарно подобное приведение к хессенберговому виду становится [[Разложения, содержащие трёхдиагональную матрицу, унитарно подобную исходной|приведением к трёхдиагональному симметричному виду]]. В этом случае QR-алгоритм становится ещё &lt;br /&gt;
быстрее, благодаря существенно большему количеству нулей в структурах образующихся матриц..&lt;br /&gt;
&lt;br /&gt;
=== Сдвиги QR-алгоритма ===&lt;br /&gt;
&lt;br /&gt;
QR-алгоритм со сдвигами позволяет сократить количество итераций, необходимых для сходимости&amp;lt;ref name=&amp;quot;bahvalov&amp;quot;&amp;gt;Бахвалов Н.С., Жидков Н.П., Кобельков. Г.М. &amp;quot;Численные методы&amp;quot;— 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;. Пусть у нас есть матрица &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;, тогда процесс перехода к матрице &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt; выглядит следующим образом:&lt;br /&gt;
&lt;br /&gt;
* На каждом шаге подбирается число &amp;lt;math&amp;gt;\nu_k&amp;lt;/math&amp;gt; и ищется следующее QR-разложение: &amp;lt;math&amp;gt;A_k-\nu_kE=Q_kR_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычисляется матрица &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;A_{k+1} = R_kQ_k+\nu_kE&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом сохраняется свойство подобия матриц &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;A_{k+1}&amp;lt;/math&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A_{k+1} = R_kQ_k+\nu_kE=Q_{k}^{T}Q_kR_kQ_k+\nu_kE=Q_{k}^{T}(A_k-\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-Q_{k}^{T}(\nu_kE)Q_k+\nu_kE=Q_{k}^{T}A_kQ_k-\nu_kE+\nu_kE=Q_{k}^{T}A_kQ_k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подбор параметра &amp;lt;math&amp;gt;\nu_k&amp;lt;/math&amp;gt; осуществляется в зависимости от элементов матрицы &amp;lt;math&amp;gt;A_k&amp;lt;/math&amp;gt;. При алгоритме подбора параметров, известном, как &#039;&#039;правило Фрэнсиса&#039;&#039;, среднее количество итераций для большинства матриц получается порядка 2 на одно собственное значение. Существуют, однако, матрицы, для которых правило Фрэнсиса не даёт сходимости, поэтому если по истечении 10 итераций с обычным сдвигом не получилось сходимости, применяют так называемые &amp;quot;особые сдвиги&amp;quot;. Для симметрического же случая используется стратегия Уилкинсона&amp;lt;ref name = &amp;quot;Dem&amp;quot; /&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Указанные стратегии выбора сдвигов используется в программах библиотек LAPACK и SCALAPACK. Но они не являются наилучшими, поскольку для выбора новых сдвигов нужно провести предшествующие итерации до конца. Поэтому в публикациях XXI века уже появились описания т.н. многосдвиговых итераций. В этой стратегии выбор сдвигов также выполняется с помощью собственных чисел подматриц из нижнего правого угла обрабатываемых блоков, но их размерность уже берётся больше, чем 2&amp;lt;ref&amp;gt;R. Granat, Bo Kagstrom, D. Kressner &amp;quot;LAPACK Working Note #216: A novel parallel QR algorithm for hybrid distributed memory HPC systems&amp;quot;.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Неявное проведение итераций === &lt;br /&gt;
&lt;br /&gt;
Q-теорема&amp;lt;ref name = &amp;quot;Dem&amp;quot; /&amp;gt; помогает не вычислять в явном виде требуемые матрицы с их последующим перемножением, а выполнять эти операции неявно. При этом в соответствии с [[QR-алгоритм#Особенности вещественного несимметричного варианта QR-алгоритма|особенностями вещественного случая несимметричных матриц]] удаётся выполнять т.н. неявный двойной сдвиг с использованием двух комплексно сопряжённых сдвигов (например, из правила Фрэнсиса), оставаясь в рамках вещественной арифметрики, с помощью выполнения двусторонними преобразованиями Хаусхолдера т.н. вытеснения выступа. В вещественном случае аналогично (но с преимуществами симметрии) выполняется неявный одинарный сдвиг, вытеснением выступа двусторонними преобразованиями вращения (Гивенса). &lt;br /&gt;
&lt;br /&gt;
=== Обнуление поддиагональных элементов (дефляция) ===&lt;br /&gt;
&lt;br /&gt;
После того, как под диагональю какой-либо элемент становится менее порогового значения, его считают равным нулю. Это даёт возможность применить разделение диагональных блоков матрицы, соседствующих с ним, и раздельное вычисление их собственных чисел. Приём называется &#039;&#039;&#039;дефляцией&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== QR-алгоритм в различных вариантах ==&lt;br /&gt;
&lt;br /&gt;
В классическом (без приёмов ускорения) виде QR-алгоритм не применяется из-за медленности. Варианты метода, в основном, используются для матриц разного вида:&lt;br /&gt;
&lt;br /&gt;
=== Метод для матриц общего вида ===&lt;br /&gt;
&lt;br /&gt;
[[QR-алгоритм, используемый в SCALAPACK]] для решения проблемы собственных значений у матриц общего вида в настоящее время использует тот подход к выбору сдвигов, который не подтверждён теоретически, но имел лучшие практические показатели на момент создания библиотеки LAPACK. Это выполнение процедуры &amp;quot;двойного сдвига&amp;quot; с величинами, равными собственным значениям последней диагональной клетки размера 2х2 у всех диагональных блоков, больших размером.&lt;br /&gt;
Поскольку существуют матрицы, для которых этот выбор сдвигов не даёт сходимости, то после 10й итерации при отсутствии уменьшения поддиагональных элементов выполняется некий &amp;quot;особый&amp;quot; сдвиг.&lt;br /&gt;
&lt;br /&gt;
=== Метод для симметричных и эрмитовых матриц ===&lt;br /&gt;
&lt;br /&gt;
В случае симметрии (для вещественных матриц) или эрмитовости (для комплексных) применяемый для решения проблемы собственных значений QR-алгоритм использует особенности как самой задачи (собственные числа таких матриц вещественны), так и получаемых промежуточных результатов (хессенберговы матрицы оказываются трёхдиагональными симметричными), что сокращает расчёты.  &lt;br /&gt;
[[QR-алгоритм для симметричных матриц, используемый в SCALAPACK]] для решения проблемы собственных значений у симметричных матриц в настоящее время использует подход к выбору сдвигов, разработанный в начале 90-х гг. XX века&amp;lt;ref&amp;gt;G. HENRY, Improving Data Re-Use in Eigenvalue-Related Computations, PhD thesis, Cornell University, Ithaca, NY, January 1994&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Использование QR-алгоритма для нахождения сингулярных чисел ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
[[Категория:Алгоритмы для матриц]]&lt;br /&gt;
&lt;br /&gt;
[[en:QR algorithm]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BD%D0%B0%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2)&amp;diff=28478</id>
		<title>Спектральное разложение (нахождение собственных значений и векторов)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A1%D0%BF%D0%B5%D0%BA%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BD%D0%B0%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2)&amp;diff=28478"/>
		<updated>2021-04-07T08:14:30Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{level-p}}&lt;br /&gt;
&lt;br /&gt;
== Математическая формулировка задачи ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Задача нахождения собственных значений и собственных векторов&#039;&#039;&#039; для матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; заключается в поиске таких соответствующих друг другу чисел &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; и &#039;&#039;ненулевых&#039;&#039; векторов &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, которые удовлетворяют уравнению &amp;lt;math style=&amp;quot;vertical-align:0%&amp;quot;&amp;gt;Ax=\lambda x&amp;lt;/math&amp;gt;. Числа &amp;lt;math&amp;gt;\lambda&amp;lt;/math&amp;gt; называются собственными значениями, а вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - соответствующими им собственными векторами&amp;lt;ref&amp;gt;В.В.Воеводин, Ю.А.Кузнецов. Матрицы и вычисления. М.: Наука, 1984.&amp;lt;/ref&amp;gt;. Данная задача является одной из самых сложных задач линейной алгебры&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;Воеводин В.В. Вычислительные основы линейной алгебры. М.: Наука, 1977.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
=== Истоки задачи ===&lt;br /&gt;
&lt;br /&gt;
Собственные вектора и собственные значения применяются в различных областях науки: в аналитической геометрии, при решении систем интегральных уравнений, в математической физике. В частности, в случае приближения линейных операторов в конечных подпространствах собственные числа получаемых матриц могут приближать спектр таких операторов. Естественно, степень приближения в таких случаях должна быть исследована и обоснована.  &lt;br /&gt;
&lt;br /&gt;
=== Общие теоретические выкладки ===&lt;br /&gt;
&lt;br /&gt;
Из &amp;lt;math style=&amp;quot;vertical-align:0%&amp;quot;&amp;gt;Ax=\lambda x&amp;lt;/math&amp;gt; при ненулевом &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; следует вырожденность &amp;lt;math&amp;gt;A-\lambda E&amp;lt;/math&amp;gt;. Поэтому, если для задачи нужны только собственные числа, то их можно найти как корни многочлена &amp;lt;math&amp;gt;det(A-\lambda E)&amp;lt;/math&amp;gt;, называемого &#039;&#039;характеристическим многочленом&#039;&#039; матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;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;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
[[Категория:Алгоритмы для матриц]]&lt;br /&gt;
&lt;br /&gt;
[[en:Eigenvalue decomposition (finding eigenvalues and eigenvectors)]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=27414</id>
		<title>Алговики:Общий форум</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D0%B2%D0%B8%D0%BA%D0%B8:%D0%9E%D0%B1%D1%89%D0%B8%D0%B9_%D1%84%D0%BE%D1%80%D1%83%D0%BC&amp;diff=27414"/>
		<updated>2019-09-06T09:28:51Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: /* Обустраивание проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{project internals nav}}&lt;br /&gt;
== Обустраивание проекта ==&lt;br /&gt;
Админы, скопируйте пожалуйста [https://ru.wikipedia.org/wiki/MediaWiki:Edittools] в [[MediaWiki:Edittools]] - удобнее работать с текстом будет. [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 14:03, 8 июля 2016 (MSK)&lt;br /&gt;
: Сделано. — [[S:Contributions/Lineprinter|lineprinter]] 11:13, 1 ноября 2016 (MSK)&lt;br /&gt;
&lt;br /&gt;
А можно подключить гаджеты? В частности, HotCat и CategoryTree для удобной работы с категориями.  [[Участник:AntonChupin|AntonChupin]] ([[Обсуждение участника:AntonChupin|обсуждение]]) 12:28, 6 сентября 2019 (MSK)&lt;br /&gt;
&lt;br /&gt;
== Список описаний алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
{{:Список описаний алгоритмов}}&lt;br /&gt;
&lt;br /&gt;
== Словарик ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Русский&lt;br /&gt;
!English&lt;br /&gt;
|-&lt;br /&gt;
|алгоритм&lt;br /&gt;
|algorithm&lt;br /&gt;
|-&lt;br /&gt;
|вершина (графа)&lt;br /&gt;
|vertex&lt;br /&gt;
|-&lt;br /&gt;
|входные/выходные данные&lt;br /&gt;
|input/output data&lt;br /&gt;
|-&lt;br /&gt;
|вычислительная мощность&lt;br /&gt;
|computational power&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (алгоритма)&lt;br /&gt;
|computational kernel&lt;br /&gt;
|-&lt;br /&gt;
|вычислительное ядро (процессора)&lt;br /&gt;
|computational core&lt;br /&gt;
|-&lt;br /&gt;
|вычислительный узел&lt;br /&gt;
|computational node&lt;br /&gt;
|-&lt;br /&gt;
|граф алгоритма&lt;br /&gt;
|algorithm graph&lt;br /&gt;
|-&lt;br /&gt;
|дуга (графа)&lt;br /&gt;
|edge&lt;br /&gt;
|-&lt;br /&gt;
|избыточные вычисления &lt;br /&gt;
|redundant computation&lt;br /&gt;
|-&lt;br /&gt;
|информационный граф&lt;br /&gt;
|information graph&lt;br /&gt;
|-&lt;br /&gt;
|каноническая ярусно-параллельная форма&lt;br /&gt;
|canonical parallel form&lt;br /&gt;
|-&lt;br /&gt;
|кэш-строка (строка кэш-памяти)&lt;br /&gt;
|cache line&lt;br /&gt;
|-&lt;br /&gt;
|локальность&lt;br /&gt;
|locality&lt;br /&gt;
|-&lt;br /&gt;
|макроструктура&lt;br /&gt;
|macro structure&lt;br /&gt;
|-&lt;br /&gt;
|масштабируемость&lt;br /&gt;
|scalability&lt;br /&gt;
|-&lt;br /&gt;
|метод сдваивания&lt;br /&gt;
|pairwise summation&lt;br /&gt;
|-&lt;br /&gt;
|накладные расходы&lt;br /&gt;
|overhead&lt;br /&gt;
|-&lt;br /&gt;
|параллельная сложность&lt;br /&gt;
|parallel complexity&lt;br /&gt;
|-&lt;br /&gt;
|последовательный (алгоритм, программа)&lt;br /&gt;
|serial (sequential)&lt;br /&gt;
|-&lt;br /&gt;
|последовательная сложность&lt;br /&gt;
|serial complexity&lt;br /&gt;
|-&lt;br /&gt;
|производительность&lt;br /&gt;
|performance&lt;br /&gt;
|-&lt;br /&gt;
|реализация&lt;br /&gt;
|implementation&lt;br /&gt;
|-&lt;br /&gt;
|ресурс параллелизма&lt;br /&gt;
|parallelism resource&lt;br /&gt;
|-&lt;br /&gt;
|сопроцессор&lt;br /&gt;
|co-processor&lt;br /&gt;
|-&lt;br /&gt;
|ускорение&lt;br /&gt;
|speedup&lt;br /&gt;
|-&lt;br /&gt;
|ускоритель&lt;br /&gt;
|accelerator&lt;br /&gt;
|-&lt;br /&gt;
|функциональное устройство&lt;br /&gt;
|functional unit&lt;br /&gt;
|-&lt;br /&gt;
|цикл (программы)&lt;br /&gt;
|loop&lt;br /&gt;
|-&lt;br /&gt;
|эффективность&lt;br /&gt;
|efficiency&lt;br /&gt;
|-&lt;br /&gt;
|ярус&lt;br /&gt;
|layer&lt;br /&gt;
|-&lt;br /&gt;
|ярусно-параллельная форма&lt;br /&gt;
|parallel form&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%B4%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5_(%D0%91%D0%9F%D0%A4)&amp;diff=18689</id>
		<title>Быстрое дискретное преобразование Фурье (БПФ)</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%B4%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5_(%D0%91%D0%9F%D0%A4)&amp;diff=18689"/>
		<updated>2016-11-21T08:33:35Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {{Assignment|IgorS}}&lt;br /&gt;
Авторы: [[Участник:Chachba.A|Чачба А.Н.]], [[Участник:Weasel|Костоев Р.С.]] &lt;br /&gt;
&lt;br /&gt;
[[Участник:Chachba.A|Чачба А.Н.]] заполнил половину всех заполненных пунктов (а именно 1.1, 1.2, 1.6, 1.8, 1.9) и построил информационный граф алгоритма, [[Участник:Weasel|Костоев Р.С.]] написал программу и провел серию запусков на суперкомпьютере и заполнил вторую половину пунктов. Оба после заполнения исправляли найденные ошибки во всех пунктах.&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Быстрое преобразование Фурье (БПФ)&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N \log N)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(\log N)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмов =&lt;br /&gt;
&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
Преобразование Фурье - взаимно однозначное отображение одной функции &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; вещественной переменной, называемой таргетным сигналом, с другой функцией &amp;lt;math&amp;gt;\hat{f}&amp;lt;/math&amp;gt; вещественной переменной, называемой образом Фурье, или спектром исходной функции, по формуле:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\hat{f}(\omega)=\frac{1}{\sqrt{2\pi}}\int\limits_{-\infty}^{\infty}f(x)e^{-ix\omega}\,dx&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Дискретное преобразование Фурье, в свою очередь, есть аналог непрерывного преобразования Фурье, но для дискретного сигнала, содержащего &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; отсчетов.&lt;br /&gt;
Широко применяется в цифровой обработке сигналов, теории вероятностей, криптографии и акустике.&lt;br /&gt;
Преобразование Фурье обратимо, причем обратное преобразование имеет практически ту же форму, что и прямое.&lt;br /&gt;
Преобразование Фурье имеет сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, но существует быстрый вариант преобразование Фурье со сложностью &amp;lt;math&amp;gt;O(N\log{N})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Такая скорость достигается благодаря применению схемы «разделяй и властвуй». Общий вид преобразования позволяет разделить массив на несколько частей таким образом, что, применяя преобразование Фурье к отдельным его частям и объединяя специальным образом результаты (при помощи поворотных множителей и повторного применения преобразования), получать на выходе образ исходного вектора. Но благодаря разделению массива исходного размера на части суммарная асимптотическая сложность алгоритма уменьшается.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
Пусть исходный сигнал имеет значения &amp;lt;math&amp;gt;x_n,\quad n = 0,\dots,N-1&amp;lt;/math&amp;gt;, тогда дискретное прямое преобразование Фурье (ДПФ) имеет вид:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
X_k = \sum_{n=0}^{N-1}x_ne^{-\frac{2\pi i}{N}kn},\quad k = 0, \dots, N-1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Обозначим &amp;lt;math&amp;gt; \varepsilon_{N} = e^{-\frac{2\pi i}{N}}&amp;lt;/math&amp;gt;, тогда ДПФ можно перезаписать в матричной форме:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar X = A\bar x&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где матрица &amp;lt;math&amp;gt;A = \{\varepsilon_{N}^{(i - 1)(j - 1)}\}_{i,j=1}^{N}&amp;lt;/math&amp;gt;&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
Пусть, для простоты &amp;lt;math&amp;gt; N = km&amp;lt;/math&amp;gt;, тогда рекурсивная реализация преобразования Фурье, за счет &amp;lt;math&amp;gt;{k}&amp;lt;/math&amp;gt; рекурсий на первом этапе и &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; на последнем этапе, имеет суммарную сложность &amp;lt;math&amp;gt;O(Nk + Nm + km) = O(N(k + m))&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
В случае, например &amp;lt;math&amp;gt;N = 2^n&amp;lt;/math&amp;gt; сложность БПФ составляет &amp;lt;math&amp;gt;O(N\log{N})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В общем же случае, когда &amp;lt;math&amp;gt;N = \prod_{i=1}^np_i&amp;lt;/math&amp;gt; сложность БПФ составляет &amp;lt;math&amp;gt; O(N(\sum_{i=1}^np_i))&amp;lt;/math&amp;gt;. Так как рекурсия применяется каждый раз при отщеплении одного множителя, то можно заключить, что глубина рекурсии алгоритма составляет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — число множителей в факторизации &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В свою очередь, если число &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; не факторизуется в произведение простых множителей (то есть &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; — простое число), то данный алгоритм напрямую не применим. На замену ему приходит алгоритм Радера, который в некотором смысле сводит задачу размерности &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; к подзадаче задаче размерности &amp;lt;math&amp;gt;N\pm 1&amp;lt;/math&amp;gt; вычисления свертки, в которой допустимо и увеличение размерности до составных в том числе.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Макроструктура БПФ для случая &amp;lt;math&amp;gt;N = km&amp;lt;/math&amp;gt; описывается рекурсивно:&lt;br /&gt;
# &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; независимых преобразований векторов меньшей размерности &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;br /&gt;
#Умножение элементов на поворотные коэффициенты (&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; умножений)&lt;br /&gt;
# &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; обратных преобразований векторов размерностей &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
Рекурсивный метод для случая &amp;lt;math&amp;gt;N = 2^k&amp;lt;/math&amp;gt;, без оптимизации на C++:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;complex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
typedef complex&amp;lt;double&amp;gt; cd;&lt;br /&gt;
typedef vector&amp;lt;cd&amp;gt; vcd;&lt;br /&gt;
&lt;br /&gt;
vcd fft(const vcd &amp;amp;as) { &lt;br /&gt;
  int n = as.size();&lt;br /&gt;
  if (n == 1) return vcd(1, as[0]);&lt;br /&gt;
&lt;br /&gt;
  vcd w(n); // Calculate roots&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++) {&lt;br /&gt;
    double alpha = 2 * M_PI * i / n;&lt;br /&gt;
    w[i] = cd(cos(alpha), sin(alpha));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  vcd A(n / 2), B(n / 2);&lt;br /&gt;
  for (int i = 0; i &amp;lt; n / 2; i++) {&lt;br /&gt;
    A[i] = as[i * 2];&lt;br /&gt;
    B[i] = as[i * 2 + 1];&lt;br /&gt;
  }&lt;br /&gt;
  vcd Av = fft(A);&lt;br /&gt;
  vcd Bv = fft(B);&lt;br /&gt;
  vcd res(n);&lt;br /&gt;
  for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
    res[i] =   Av[i % (n / 2)] +&lt;br /&gt;
        w[i] * Bv[i % (n / 2)];&lt;br /&gt;
  return res;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
В последовательном варианте можно бороться за улучшение константы сложности, предподсчитав значения соответствующих коэффициентов.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
Алгоритм состоит из трех этапов, следовательно если &amp;lt;math&amp;gt;N = \prod_{i = 1}^np_i&amp;lt;/math&amp;gt;, то общая сложность составляет порядка &amp;lt;math&amp;gt;O(N\sum_{i=1}^np_i)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Пусть существует некоторое фиксированное число &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, такое что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
p_i \leq P \quad \forall i = 1...n,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
тогда, учитывая, что &amp;lt;math&amp;gt;n \leq \log_{P}{N}&amp;lt;/math&amp;gt;, сложность алгоритма можно записать в виде &amp;lt;math&amp;gt;O(N\log{N})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
[[Файл:FourierGraph2.png|center|thumb|640px|&#039;&#039;&#039;Рисунок 1.&#039;&#039;&#039; Информационный граф преобразования Кули-Тьюки для &amp;lt;math&amp;gt;N = km = 25, k = 5, m = 5&amp;lt;/math&amp;gt;. Желтые вершины - умножение на поворотные множители.]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
В силу независимости всех рекурсивных вызовов и того факта, что путь максимальной длины в графе (так называемый критический путь) имеет порядок &amp;lt;math&amp;gt;O(\log{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;
&#039;&#039;Замечание&#039;&#039;: формально основание логарифма на каждом рекурсивном шаге зависит от множителя в факторизации &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;, потому использована О-символика.&lt;br /&gt;
&lt;br /&gt;
При условии ограниченности количества доступных вычислительных узлов рекомендуется выбирать множители в разложении числа &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; близкими к числу доступных узлов, таким образом доступные ресурсы будут использованы максимально эффективно.&lt;br /&gt;
&lt;br /&gt;
Итого алгоритм относится к логарифмическому классу алгоритмов по параллельной сложности.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
Чаще всего для обработки сигналов в качестве входных данных для БПФ подается вектор размерности &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; вещественных элементов. Но БПФ работает и для случая элементов над комплексным полем. Таким образом, например, можно экономить на количестве применений БПФ в некоторой конкретной задаче путем приведения двух векторов вещественных чисел к одному вектору комплексных чисел с вещественной частью равной первому вектору и комплексной частью равной второму вектору:&lt;br /&gt;
&amp;lt;math&amp;gt;x, y&amp;lt;/math&amp;gt; - исходные сигналы. Обозначим &amp;lt;math&amp;gt;z = x + iy&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;F(k, x)&amp;lt;/math&amp;gt; - это &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-ый коэффициент образа Фурье вектора &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;. Тогда:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(k, x) = \frac{F(k, z) + F(k, \bar z)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;F(k, y) = -i\frac{F(k, z) - F(k, \bar z)}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Учитывая, что &amp;lt;math&amp;gt;F(k, \bar z) = \overline{F(N - k, z)}&amp;lt;/math&amp;gt;, получаем:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;F(k, x) = \frac{F(k, z) + \overline{F(N-k, z)}}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;F(k, y) = -i\frac{F(k, z) - \overline{F(N-k,z)}}{2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Такой способ позволяет приблизительно в два раза уменьшить количество вычислений.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
Вектор размерности &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; комплексных чисел - спектр исходного сигнала.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
Матрица Вандермонда преобразования &amp;lt;math&amp;gt;A = \{e^{-\frac{2\pi i}{N}(i - 1)(j - 1)}\}_{i,j=1}^{N}&amp;lt;/math&amp;gt; такая, что:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
A^{-1} = \frac{1}{N}A^*&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Таким образом обратное преобразование Фурье с точностью до нормирующего множителя и сопряжения элементов матрицы совпадает с прямым.&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Локальность данных и вычислений ==&lt;br /&gt;
&lt;br /&gt;
== Возможные способы и особенности параллельной реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Масштабируемость алгоритма и его реализации ==&lt;br /&gt;
Все запуски программы[http://pastebin.com/raw/xajKb9JN] проводились на с/к Blue Gene/P с использованием библиотеки Intel MKL.&lt;br /&gt;
&lt;br /&gt;
IBM Blue Gene/P — массивно-параллельная вычислительная система, которая состоит из двух стоек, включающих 2048 четырехъядерных вычислительных узлов, с пиковой производительностью 27,9 терафлопс.&lt;br /&gt;
&lt;br /&gt;
Характеристики системы:&lt;br /&gt;
* две стойки с вычислительными узлами и узлами ввода-вывода&lt;br /&gt;
* 1024 четырехъядерных вычислительных узла в каждой из стоек&lt;br /&gt;
* 16 узлов ввода-вывода в стойке (в текущей конфигурации активны 8, т.е. одна I/O-карта на 128 вычислительных узлов)&lt;br /&gt;
* программирование с использованием MPI, OpenMP/pthreads, POSIX I/O&lt;br /&gt;
* высокая энергоэффективность: ∼ 372 MFlops/W&lt;br /&gt;
&lt;br /&gt;
Вычислительный узел включает в себя четырехъядерный процессор, 2 ГБ общей памяти и сетевые интерфейсы.&lt;br /&gt;
&lt;br /&gt;
Вычислительной узел:&lt;br /&gt;
* четыре микропроцессорных ядра PowerPC 450 (4-way SMP)&lt;br /&gt;
* пиковая производительность: 4 ядра x 3,4 GFlop/sec на ядро = 13,6 GFlop/sec&lt;br /&gt;
* пропускная способность памяти: 13,6 GB/sec&lt;br /&gt;
* 2 ГБ общей памяти&lt;br /&gt;
* 2 x 4 МБ кэш-памяти 2-го уровня (в документации по BG/P носит название L3)&lt;br /&gt;
* легковесное ядро (compute node kernel, CNK), представляющее собой Linux-подобную операционную систему, поддерживающую значительное подмножество Linux-совместимых системных вызовов&lt;br /&gt;
* асинхронные операции межпроцессорных обменов (выполняются параллельно с вычислениями)&lt;br /&gt;
* операции ввода-вывода перенаправляются I/O-картам через сеть коллективных операций&lt;br /&gt;
&lt;br /&gt;
[[Файл:Time.PNG|center|thumb|640px|&#039;&#039;&#039;Рисунок 2.&#039;&#039;&#039; Время выполнения параллельной реализации БПФ в секундах. Size - число элементов массива. Р - число использованных процессоров.]]&lt;br /&gt;
&lt;br /&gt;
[[Файл:Efff.PNG|center|thumb|640px|&#039;&#039;&#039;Рисунок 3.&#039;&#039;&#039; Эффективность параллельной реализации БПФ. Size - число элементов массива. Р - число использованных процессоров. Эффективность в пределах от 0 до 1.]]&lt;br /&gt;
&lt;br /&gt;
Как видно из графика, эффективность параллельной реализации резко падает с ростом количества используемых процессоров, связано это с увеличением количества накладных расходов.&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
* Самая популярная библиотека для работы с преобразованиями Фурье это [http://www.fftw.org FFTW]&lt;br /&gt;
* Реализация от Intel в рамках [//software.intel.com/en-us/intel-mkl Math Kernel Library]&lt;br /&gt;
* Реализация ДПФ на графических картах от NVidia - [//developer.nvidia.com/cufft cuFFT]&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
* Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
* Описание алгоритма на Википедии: [https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Быстрое преобразование Фурье]&lt;br /&gt;
* Материалы лекций по &amp;quot;Алгоритмам и структурам данных&amp;quot; Школы Анализа Данных Яндекса&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=3809</id>
		<title>Категория:Решение систем линейных уравнений</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=3809"/>
		<updated>2016-07-08T13:31:29Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Алгоритмы]]&lt;br /&gt;
[[Категория:Алгоритмы для матриц]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Linpack_benchmark&amp;diff=3808</id>
		<title>Linpack benchmark</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=Linpack_benchmark&amp;diff=3808"/>
		<updated>2016-07-08T13:31:09Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Frolov|А.В.Фролов]], [[Участник:VadimVV|Вад.В.Воеводин]] ([[#Описание локальности данных и вычислений|раздел 2.2]]), [[Участник:Teplov|А.М.Теплов]] (раздел [[#Масштабируемость алгоритма и его реализации|2.4]])&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Linpack benchmark&#039;&#039;&#039; является тестом, разработанным как приложение к библиотеке Linpack для тестирования производительности компьютерных систем. По сути это генерирование некоторой системы линейных алгебраических уравнений (СЛАУ) &amp;lt;math&amp;gt;A \vec{x} = \vec{b}&amp;lt;/math&amp;gt; со случайной плотной квадратной матрицей &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и вектором &amp;lt;math&amp;gt;\vec{b}&amp;lt;/math&amp;gt; таким, чтобы решением был вектор &amp;lt;math&amp;gt;\vec{x}&amp;lt;/math&amp;gt;, у которого все элементы равны 1, с последующим решением этой СЛАУ. Решение в силу неспецифичности (с рядом оговорок) матрицы делается в два этапа. Сначала для матрицы системы выполняется &amp;lt;math&amp;gt;PLU&amp;lt;/math&amp;gt;-разложение (&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; — матрица перестановок, &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; — левая треугольная с единичными диагональными элементами, &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; — правая треугольная матрица) методом Гаусса с выбором ведущего элемента по столбцу. На втором этапе с помощью полученного разложения последовательно решается СЛАУ вида &amp;lt;math&amp;gt;P L U \vec{x} = \vec{b}&amp;lt;/math&amp;gt;. На третьем этапе вычисляется невязка &amp;lt;math&amp;gt;\vec{r} = A \vec{x} - \vec{b}&amp;lt;/math&amp;gt; и её характеристики, после чего выводятся данные о полученных точности и производительности вычислений. Интересно, что производительность вычисляется только для основной части алгоритма, т. е. туда не включены ни вычисление невязки, ни вычисление норм.&lt;br /&gt;
&lt;br /&gt;
Не следует путать Linpack benchmark, разработанный для тестирования компьютеров традиционной архитектуры, и High Performance Linpack benchmark, который разработан для тестирования компьютерных систем с параллельной архитектурой и в основе  которого лежит хоть и сходный, но другой алгоритм.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные: невырожденная (ГСЧ подобран так, чтобы это обеспечивалось, в версии от 1992 г.) квадратная матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;a_{ij}&amp;lt;/math&amp;gt;), вектор правой части &amp;lt;math&amp;gt;\vec{b}&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;b_i&amp;lt;/math&amp;gt;). В реальности они не вполне входные (элементы матрицы генерирует псевдослучайно сама программа, все они находятся в диапазоне (-1/2, +1/2), &amp;lt;math&amp;gt;b_i = \sum\limits_{j = 1}^i a_{ij}&amp;lt;/math&amp;gt;), но для разбора общей схемы алгоритма удобно считать их входными данными.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные: левая треугольная матрица &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;l_{ij}&amp;lt;/math&amp;gt;), правая треугольная матрица &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;u_{ij}&amp;lt;/math&amp;gt;), матрица перестановок &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (вычисляется не в развёрнутом виде, а как набор номеров ведущих элементов), вектор решения &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Детальные формулы отдельных частей алгоритма здесь описывать не будем, поскольку они являются самостоятельными алгоритмами и их детальные описания должны быть выполнены раздельно. Поэтому здесь будет приведена только общая схема алгоритма.&lt;br /&gt;
&lt;br /&gt;
Первая часть — разложение матрицы в произведение двух треугольных и матрицы перестановок: &amp;lt;math&amp;gt;A = P L U&amp;lt;/math&amp;gt; — выполняется методом Гаусса с выбором ведущего элемента по столбцу. При этом матрица перестановок хранится с помощью вектора, характеризующего выполненные перестановки. Матрица &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; левая треугольная с единичными диагональными элементами, матрица &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; — правая треугольная. &lt;br /&gt;
&lt;br /&gt;
Вторая часть состоит из двух решений треугольных СЛАУ. Сначала c помощью «прямой-обратной» подстановки решается система &amp;lt;math&amp;gt;L \vec{y} = P T \vec{b}&amp;lt;/math&amp;gt;, затем с помощью обратной подстановки — система &amp;lt;math&amp;gt;U \vec{x} = \vec{y}&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;\vec{r} = A \vec{x} - \vec{b}&amp;lt;/math&amp;gt; и затем её равномерной нормы, а также нормы решения. По окончании этой части алгоритм выдаёт данные по точности полученного решения, а также вычисляет производительность системы.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная часть алгоритма — разложение матрицы методом Гаусса с выбором ведущих элементов по столбцу — определяет основную часть операций. Следующая по значимости часть — вычисление невязки и её нормы — реализовано подпрограммой вычисления суммы вектора и произведения матрицы на другой вектор и функцией вычисления равномерной нормы. Третьи по значимости части — обратный ход метода Гаусса и «прямой-обратный» ход метода Гаусса.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, разложение матрицы методом Гаусса с выбором ведущих элементов по столбцу — определяет основную часть операций и при этом является первой макрооперацией. После неё идёт «прямой-обратный» ход метода Гаусса и сразу за ним — обратный ход метода Гаусса. После повторного заполнения матрицы следующей макрооперацией является вычисление невязки решения СЛАУ, а затем — вычисление её и вектора решения равномерных норм.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Математическое описание алгоритма описано выше. При этом в стандартном тесте из-за того, что разложение Гаусса вычисляется на месте исходной матрицы, а также из-за того, что при прямом-обратном и обратном ходе решение заанимает место правой части, после вычисления решения приходится заново перевычислять как матрицу системы, так и правую часть — для последующего вычисления невязки. После вычисления невязки её норма в принципе может быть вычислена в любом порядке с нормой решения, это не влияет на алгоритм и его результаты.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку основной частью алгоритма является разложение Гаусса с выбором ведущего элемента по столбцу, то он, как и эта часть, относится к алгоритмам с &#039;&#039;кубической&#039;&#039; сложностью. Остальные части квадратичны по сложности и потому не дают сравнимого вклада в сложность алгоритма.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Граф состоит из информационных графов своих основных частей. Первая часть (метод Гаусса с выбором ведущего элемента по столбцу) имеет самый сложный из графов. На рис.1 отражён упрощённый граф этой части, post factum по результатам выборов ведущих элементов. Зеленым отображены операции определения максимумов, с запоминанием позиций. Желтым цветом выделено обращение очередного ведущего элемента, коричневым – умножения в текущем столбце, фиолетовым – операции &amp;lt;math&amp;gt;a b + c&amp;lt;/math&amp;gt; в других столбцах. На рис.2 приведён граф одного из слоёв (одного шага метода). Обозначения – те же самые, что в полном графе. Пунктир означает рассылку данных из ведущей строки.&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot;&lt;br /&gt;
    |- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
    | [[File:Gaussian elimination.png|700px|thumb|Рисунок 1. Упрощённый граф метода Гаусса с выбором ведущего элемента по столбцу]]&lt;br /&gt;
    | [[File:Gaussian elimination step.png|500px|Рисунок 2. Граф одного шага метода Гаусса|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Вторая часть состоит из почти аналогичных фрагментов. Первый из них – «прямой ход», а именно решение СЛАУ с левой треугольной матрицей &amp;lt;math&amp;gt;L \vec{y} = \vec{b}&amp;lt;/math&amp;gt; (рис.3). Диагональные элементы матрицы единичны, поэтому в этом куске нет операций деления. Все зелёные вершины отвечают операциям &amp;lt;math&amp;gt;a b + c&amp;lt;/math&amp;gt;. Второй – «обратный ход», а именно решение СЛАУ с правой (верхней) треугольной матрицей &amp;lt;math&amp;gt;U \vec{x} = \vec{y}&amp;lt;/math&amp;gt; (рис.4). Для её матрицы нет информации о специфичности, и потому в графе появляются также операции деления , они обозначены желтым цветом.&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot;&lt;br /&gt;
    |- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
    | [[File:DirectL.png|500px|thumb|Рисунок 3. Граф решения СЛАУ с левой треугольной матрицей]]&lt;br /&gt;
    | [[File:DirectU.png|450px|thumb|Рисунок 4. Граф решения СЛАУ с правой треугольной матрицей]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
При изучении ресурса параллелизма теста видно, что основная сложность (&#039;&#039;квадратичная&#039;&#039;) будет у разложения Гаусса с выбором ведущего элемента по столбцу (именно из-за наличия выбора элемента по столбцу). Остальные части алгоритма имеют не более линейной сложности. Поэтому для оптимизации вычислений возможному исследователю нужно заняться именно оптимизацией разложения Гаусса с выбором ведущего элемента по столбцу. Кроме этого, первый кусок второй части (решение первой из треугольных СЛАУ) может быть пристыкован к первой части исполнен почти полностью «на её фоне», ибо направление перевычисления данных у них совпадают. Однако второй кусок второй части, несмотря на его схожесть с первым, может быть вычислен не ранее, чем будет выполнен весь первый кусок, поскольку у них направления перевычисления данных противоположны.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
По сути теста у него всегда одни и те же данные, причём вычисляемые в самом же тесте. Поэтому в строгом смысле у алгоритма нет входных данных. &lt;br /&gt;
&lt;br /&gt;
Выходными данными являются вычисляемые и выдаваемые тестом нормы невязки, решения, матрицы и их отношения, а также вычисляемая мощность вычислений целевой вычислительной системы.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Строго говоря, при реализации теста испытывающий компьютерную систему испытывает и версии Линпака или другого пакета, откуда он должен вставлять вызовы разложения Гаусса и решения СЛАУ с помощью полученного разложения. Поэтому находящиеся в сети версии теста не являются догмой, поскольку с их помощью можно тестировать и другие версии реализации метода Гаусса. Как уже отмечено выше, из-за того, что разложение Гаусса вычисляется на месте исходной матрицы, а также из-за того, что при прямом-обратном и обратном ходе решение занимает место правой части, после вычисления решения приходится заново перевычислять как матрицу системы, так и правую часть — для последующего вычисления невязки. Это решение вполне можно поменять с целью оптимизации теста.&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
&lt;br /&gt;
[[file:linpack 1.PNG|thumb|center|700px|Рисунок 5. Тест Linpack. Общий профиль обращений в память]]&lt;br /&gt;
&lt;br /&gt;
На рис.5 представлен общий профиль обращений в память для теста Linpack. В данном тесте задействовано 3 массива. Обращения к первым двум выделены на рис.5 зеленым цветом (фрагменты 1 и 2), остальные обращения выполняются к элементам третьего массива – матрицы, содержащей коэффициенты СЛАУ. Данный тест состоит из двух этапов – факторизации матрицы и собственно решения СЛАУ. Разделение между этапами отмечено на рисунке оранжевой линией. Видно, что первый этап обладает итерационной структурой, при этом на каждой следующей итерации отбрасываются из рассмотрения несколько элементов матрицы с наименьшими индексами.  Также можно заметить, что на втором этапе выполняется два прохода по элементам матрицы с возрастающим шагом, сначала последовательный, затем обратный. Однако в целом профиль устроен достаточно сложно, и для понимания свойств локальности необходимо детальное рассмотрение.&lt;br /&gt;
&lt;br /&gt;
Фрагмент 1 показан отдельно на рис.6. При подобном приближении хорошо видно, что данный фрагмент состоит из двух последовательных переборов всех элементов массива, при этом размер фрагмент очень мал по сравнению с общим профилем. Такой последовательный перебор характеризуется высокой пространственной и достаточно низкой временной локальностью, поскольку к каждому элементу обращение выполняется всего дважды.&lt;br /&gt;
&lt;br /&gt;
[[file:linpack 2.PNG|thumb|center|400px|Рисунок 6. Фрагмент 1 (профиль обращений к первому массиву)]]&lt;br /&gt;
&lt;br /&gt;
Далее перейдем к рассмотрению фрагмента 2, представленного на рис.7. Данный профиль состоит из двух похожих этапов, состоящих из набора итераций. На каждой итерации выполняется последовательный перебор элементов массива, при этом на следующей итерации отбрасывается их рассмотрения один из элементов: на первом этапе – элемент с минимальным индексом, на втором – с максимальным индексом.&lt;br /&gt;
&lt;br /&gt;
Подобный профиль обладает очень высокой как пространственной, так и временной локальностью, поскольку почти всегда обращения выполняются к соседним элементам, причем элементы достаточно часто используются повторно. Однако заметим, что данный фрагмент состоит всего из около 2000 элементов, что значительно меньше общего числа обращений в программе. Значит, большая часть (и, скорее всего,  основное влияние) приходится на последний массив.&lt;br /&gt;
&lt;br /&gt;
[[file:linpack 3.PNG|thumb|center|400px|Рисунок 7. Фрагмент 2 (профиль обращений к второму массиву)]]&lt;br /&gt;
&lt;br /&gt;
На рис.8 представлен фрагмент 3, выделенный на рис.5, соответствующий одной итерации цикла, в котором выполняются обращения к данному массиву. Из данного рисунка хорошо видно, что итерация состоит из двух частей, соответствующих двум внутренним циклам. В обоих случаях число обращений на любой итерации внутреннего цикла примерно равно, однако в первом внутреннем цикле на следующей итерации перебирается следующая часть элементов массива, в то время как во втором цикле перебираются одни и те же элементы.&lt;br /&gt;
&lt;br /&gt;
[[file:linpack 4.PNG|thumb|center|700px|Рисунок 8. Фрагмент 3 (профиль обращений к третьему массиву, одна итерация)]]&lt;br /&gt;
&lt;br /&gt;
Остается выяснить структуру обращений в память на итерациях данных двух циклов. Рассмотрим более подробно часть фрагмента, выделенную на рис.8 зеленым (рис.9). &lt;br /&gt;
&lt;br /&gt;
[[file:linpack 5.PNG|thumb|center|700px|Рисунок 9. Одна итерация фрагмент 3, небольшая часть]]&lt;br /&gt;
&lt;br /&gt;
Видно, что первые два этапа отличаются от остальных – на них выполняются некоторые начальные действия. Затем начинаются подобные итерации внутренних циклов, причем в обоих случаях (выделенные зеленым части 1 и 2) выполняется последовательный перебор элементов. Основная разница заключается лишь в том, что в первом цикле обращения к каждому элементу выполняются дважды.&lt;br /&gt;
&lt;br /&gt;
Обращения к данному массиву в рамках внутренних циклов характеризуются высокой пространственной локальностью. При этом во втором цикле используются одни и те же элементы, что приводит также и к достаточно высокой временной локальности. Таким образом, в рамках одной итерации (рис. 4) локальность обращений высока. А при условии, что на разных итерациях происходят обращения к одним и тем же элементам (и число обращений на каждой итерации не так уж велико), это приводит к дальнейшему повышению локальности.&lt;br /&gt;
&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
&lt;br /&gt;
Основной фрагмент реализации, на основе которого были получены количественные оценки, приведен [http://git.algowiki-project.org/Voevodin/locality/blob/master/benchmarks/linpack/linpack_np.cpp здесь] (оригинал исходного кода взят [http://people.sc.fsu.edu/~%20jburkardt/cpp_src/linpack_bench/linpack_bench_s.cpp отсюда]). Условия запуска описаны [http://git.algowiki-project.org/Voevodin/locality/blob/master/README.md здесь].&lt;br /&gt;
&lt;br /&gt;
Первая оценка выполняется на основе характеристики daps, которая оценивает число выполненных обращений (чтений и записей) в память в секунду. Данная характеристика является аналогом оценки flops применительно к работе с памятью и является в большей степени оценкой производительности взаимодействия с памятью, чем оценкой локальности. Однако она служит хорошим источником информации, в том числе для сравнения с результатами по следующей характеристике cvg.&lt;br /&gt;
&lt;br /&gt;
На рис.10 приведены значения daps для реализаций распространенных алгоритмов, отсортированные по возрастанию (чем больше daps, тем в общем случае выше производительность). Можно увидеть, что данный показатель у теста Linpack один из самых высоких, что говорит об эффективном взаимодействии с памятью.&lt;br /&gt;
&lt;br /&gt;
[[file:linpack daps ru.PNG|thumb|center|700px|Рисунок 10. Сравнение значений оценки daps]]&lt;br /&gt;
&lt;br /&gt;
Вторая характеристика – cvg – предназначена для получения более машинно-независимой оценки локальности. Она определяет, насколько часто в программе необходимо подтягивать данные в кэш-память. Соответственно, чем меньше значение cvg, тем реже это нужно делать, тем лучше локальность. &lt;br /&gt;
&lt;br /&gt;
На рис.11 приведены значения cvg для того же набора реализаций, отсортированные по убыванию (чем меньше cvg, тем в общем случае выше локальность). Можно увидеть, что, согласно данной оценке, локальность обращений в память теста Linpack очень высока, что соответствует полученным ранее оценкам и выводам. &lt;br /&gt;
&lt;br /&gt;
[[file:linpack cvg.PNG|thumb|center|700px|Рисунок 11. Сравнение значений оценки cvg]]&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
Проведём исследование масштабируемости реализации HPL теста Linpack согласно [[Scalability methodology|методике]]. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; [http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых [[Глоссарий#Параметры запуска|параметров запуска]] реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [8 : 128] с шагом 8;&lt;br /&gt;
*	размер матрицы [1000 : 100000] c шагом 1000.&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0.039%;&lt;br /&gt;
*	максимальная эффективность реализации 86,7%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики [[Глоссарий#Производительность|производительности]] и эффективности теста HPL в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
[[file:Масштабируемость Linpack performance.png|thumb|center|700px|Рисунок 12. Тест HPL. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[file:Linpack масштабируемость эффективность.png|thumb|center|700px|Рисунок 13. Тест HPL. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости теста Linpack:&lt;br /&gt;
*	По числу процессов: -0.061256. При увеличении числа процессов эффективность на рассмотренной области изменений параметров запуска уменьшается, однако в целом уменьшение не очень быстрое. Малая интенсивность изменения объясняется высокой общей эффективностью работы при больших размерах задачи, однако при росте числа процессов эффективность равномерно уменьшается. Это объясняется также тем, что с ростом [[Глоссарий#Вычислительная сложность|вычислительной сложности]] падение эффективности становится не таким быстрым. Уменьшение эффективности на рассмотренной области работы параллельной программы объясняется быстрым ростом накладных расходов на организацию параллельного выполнения. С ростом вычислительной сложности задачи эффективность снижается так же быстро, но при больших значениях числа процессов. Это подтверждает предположение о том, что накладные расходы начинают сильно превалировать над вычислениями.&lt;br /&gt;
*	По размеру задачи: 0.010134. При увеличении размера задачи эффективность возрастает. Эффективность возрастает тем быстрее, чем большее число процессов используется для выполнения. Это подтверждает предположение о том, что размер задачи сильно влияет на эффективность выполнения приложения. Оценка показывает, что с ростом размера задачи эффективность на рассмотренной области значений параметров запуска сильно увеличивается. Также, учитывая разницу максимальной и минимальной эффективности почти в 80%, можно сделать вывод, что рост эффективности при увеличении размера задачи наблюдается на большей части рассмотренной области значений.&lt;br /&gt;
*	По двум направлениям: 0.0000284 При рассмотрении увеличения как вычислительной сложности, так и числа процессов на всей рассмотренной области значений эффективность увеличивается, однако скорость увеличения эффективности не очень большая.&lt;br /&gt;
&lt;br /&gt;
[http://git.algowiki-project.org/Teplov/Scalability/tree/master/HPL Исследованная реализация теста]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи в работе]]&lt;br /&gt;
[[Категория:Решение систем линейных уравнений]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=LU-%D1%80%D0%B0%D0%B7%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%B0&amp;diff=3807</id>
		<title>LU-разложение методом Гаусса</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=LU-%D1%80%D0%B0%D0%B7%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%BC_%D0%93%D0%B0%D1%83%D1%81%D1%81%D0%B0&amp;diff=3807"/>
		<updated>2016-07-08T13:30:55Z</updated>

		<summary type="html">&lt;p&gt;AntonChupin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:VadimVV|Вад.В.Воеводин]] ([[#Описание локальности данных и вычислений|раздел 2.2]]), [[Участник:Teplov|А.М.Теплов]] (раздел [[#Масштабируемость алгоритма и его реализации|2.4]])&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
==== Локальность реализации алгоритма ====&lt;br /&gt;
===== Структура обращений в память и качественная оценка локальности =====&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward 1.PNG|thumb|center|700px|Рисунок 2. Прямой ход метода Гаусса решения СЛАУ. Общий профиль обращений в память]]&lt;br /&gt;
&lt;br /&gt;
На рис.2 представлен профиль обращений в память для прямого хода метода Гаусса решения СЛАУ. Из исходного кода, как и из рисунка, видно, что в программе задействовано 2 основных массива: профиль обращений к элементам первого выделен зеленым (фрагмент 1); все остальные обращения происходят к элементам второго массива. Видно, что общий профиль всей программы устроен достаточно сложно. Основное, что можно заметить из данного рисунка, – это итерационная природа профиля, причем каждая следующая итерация содержит меньше обращений. Это особенно хорошо видно по фрагменту  1. &lt;br /&gt;
&lt;br /&gt;
Далее, как известно, в прямом ходе Гаусса на каждой итерации отбрасывается из рассмотрения одна из строк СЛАУ. Это отчетливо видно и на рис.2: на каждой итерации (одна из них выделена как фрагмент 2) выполняется серия обращений, связанных с отбрасываемой строкой (фрагмент 3), после чего обращения к этим элементам больше не выполняются. Также можно заметить, что фрагменты, подобные фрагменту 3, на каждой последующей итерации становятся все меньше, как по числу обращений, так и по числу элементов, к которым происходят обращения.&lt;br /&gt;
&lt;br /&gt;
Однако на основе подобной общей картины очень сложно дать даже качественные оценки локальности. Перейдем к более подробному рассмотрению фрагмента 1, соответствующего обращениям к одному из двух массивов.&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward 2.PNG|thumb|center|500px|Рисунок 3. Фрагмент 1 (профиль обращений к первому массиву)]]&lt;br /&gt;
&lt;br /&gt;
На рис.3 показан отдельно фрагмент 1, выделенный на рис.2 зеленым. Наблюдается довольно интересная картина: исходя из рис.2, складывалось впечатление, что данный профиль образуется чередованием итераций двух разных циклов, причем итерация первого цикла заметно короче итераций второго цикла. На самом же деле, из рис.3 можно увидеть, что профиль состоит из однотипных итераций, в рамках которых производится последовательный перебор элементов массива. При этом на каждой следующей итерации отбрасывается элемент с минимальным индексом. Иллюзия наличия двух разных циклов обусловлена исключительно числом обращений к другому массиву – когда число таких обращений велико, итерация данного фрагмента кажется длиннее. При этом во фрагменте 1 (как видно на рис.3) число обращений всего лишь около 1200, тогда как весь профиль обращений состоит из 34 тысяч. То есть на долю обращений к первому массиву приходится всего 3.5% всех обращений в программе.&lt;br /&gt;
&lt;br /&gt;
Поскольку основа данного профиля – последовательный перебор элементов массива, можно сказать, что данный фрагмент обладает высокой пространственной локальностью. А поскольку итераций с перебором элементов достаточно много, также видно, что и временна́я локальность достаточно высока.&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к рассмотрению профиля обращений ко второму массиву, который значительно больше и сложнее первого профиля. На рис.4 отдельно представлен фрагмент 2, выделенный на рис.2. Такой фрагмент устроен из четырех частей, отмеченных на рисунке оранжевым.&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward 3.PNG|thumb|center|700px|Рисунок 4. Фрагмент 2 (итерация профиля обращений ко второму массиву)]]&lt;br /&gt;
&lt;br /&gt;
Часть 1 очень похожа на повторяющийся последовательный перебор одного и того же небольшого числа элементов в цикле. При более близком рассмотрении можно убедиться, что это действительно так. На рис.5 показано приближение фрагмента 2, выделенное на рис.4 синим цветом. Также на этом рисунке видно, что часть 2 представляет собой практически полное подобие последовательного перебора всех элементов данного массива. Таким образом, обе эти части обладают высокой пространственной локальностью (из-за последовательного перебора). При этом часть 1 обладает также высокой временной локальностью, поскольку перебор повторяется в цикле, в отличие от части 2, где к каждому элементу выполняется только одно обращение.&lt;br /&gt;
&lt;br /&gt;
Часть 3 состоит всего из нескольких обращений и представляет собой перебор всех элементов массива, выполненных с достаточно большим шагом, гораздо большим, чем в части 2. В данном случае, из-за достаточно большого шага,  наблюдается невысокая пространственная локальность и отсутствие временно́й локальности, так как перебор выполняется единожды.&lt;br /&gt;
&lt;br /&gt;
Часть 4 представляет собой последовательный перебор части массива, по размеру соответствующей числу отброшенных из рассмотрения элементов; чем ближе к концу профиля, тем больше обращений расположено в части 4. Эта часть обладает теми же свойствами локальности, что и часть 2. Отличие заключается в числе обращений, однако в данном случае это не оказывает сильное влияние на локальность.&lt;br /&gt;
&lt;br /&gt;
При рассмотрении фрагмента 2 в целом основное влияние оказывают части 1 и 2, поэтому можно утверждать, что это фрагмент обладает достаточно высокой и пространственной, и временно́й локальностью. Однако на последующих итерациях (см. рис.2) локальность в целом будет постепенно снижаться, поскольку на каждой итерации отбрасывается из рассмотрения некоторая часть элементов.&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward 4.PNG|thumb|center|500px|Рисунок 5. Приближение фрагмента 2]]&lt;br /&gt;
&lt;br /&gt;
===== Количественная оценка локальности =====&lt;br /&gt;
&lt;br /&gt;
Основной фрагмент реализации, на основе которого были получены количественные оценки, приведен [http://git.algowiki-project.org/Voevodin/locality/blob/master/benchmarks/gauss_forward/gauss_forward.h здесь] (функция Kernel1). Условия запуска описаны [http://git.algowiki-project.org/Voevodin/locality/blob/master/README.md здесь].&lt;br /&gt;
&lt;br /&gt;
Первая оценка выполняется на основе характеристики daps, которая оценивает число выполненных обращений (чтений и записей) в память в секунду. Данная характеристика является аналогом оценки flops применительно к работе с памятью и является в большей степени оценкой производительности взаимодействия с памятью, чем оценкой локальности. Однако она служит хорошим источником информации, в том числе для сравнения с результатами по следующей характеристике cvg.&lt;br /&gt;
&lt;br /&gt;
На рис.6 приведены значения daps для реализаций распространенных алгоритмов, отсортированные по возрастанию (чем больше daps, тем в общем случае выше производительность). Можно увидеть, что отмеченный синий столбец, соответствующий прямому ходу метода Гаусса, расположен в правой части и показывает достаточно высокую производительность, немного ниже производительности теста Линпак. Также отметим, что значение daps для данной задачи практически совпадает со значением daps для всего метода Гаусса (столбец «gauss»), объединяющего как прямой, так и обратный ход. Это связано с тем, что обратный ход состоит из гораздо меньшего числа обращений, нежели прямой ход, поэтому оказывает меньшее влияние.&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward daps ru.PNG|thumb|center|700px|Рисунок 6. Сравнение значений оценки daps]]&lt;br /&gt;
&lt;br /&gt;
Вторая характеристика – cvg – предназначена для получения более машинно-независимой оценки локальности. Она определяет, насколько часто в программе необходимо подтягивать данные в кэш-память. Соответственно, чем меньше значение cvg, тем реже это нужно делать, тем лучше локальность. &lt;br /&gt;
&lt;br /&gt;
На рис.7 приведены значения cvg для того же набора реализаций, отсортированные по убыванию (чем меньше cvg, тем в общем случае выше локальность). Можно увидеть, что, согласно данной оценке, как и в случае с оценкой daps, прямой ход метода Гаусса обладает высокой локальностью. Причем согласно данной оценке тест Линпак показывает практически те же результаты. Отметим, что снова значение оценки для отдельно прямого хода и совокупности прямого и обратного ходов (столбец «gauss») совпадают.&lt;br /&gt;
&lt;br /&gt;
[[file:gauss forward cvg.PNG|thumb|center|700px|Рисунок 7. Сравнение значений оценки cvg]]&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
[[file:Масштабируемость параллельной реализации метода Гаусса Производительность.png|thumb|center|700px|Рисунок 8. Масштабируемость параллельной реализации метода Гаусса (прямой ход) Максимальная производительность. ]]&lt;br /&gt;
[[file:Масштабируемость метод Гаусса.png|thumb|center|700px|Рисунок 9. Масштабируемость параллельной реализации метода Гаусса (прямой ход) Максимальная эффективность. ]]&lt;br /&gt;
Набор изменяемых параметров запуска реализации алгоритма и границы значений параметров алгоритма: &lt;br /&gt;
*	число процессоров [4 : 256]&lt;br /&gt;
*	размер матрицы [1024 : 5120]&lt;br /&gt;
Эффективность выполнения реализации алгоритма&lt;br /&gt;
*	Минимальная эффективность 0,11 %&lt;br /&gt;
*	Максимальная эффективность 6.65%&lt;br /&gt;
Оценка масштабируемости&lt;br /&gt;
*	По числу процессов: -0.000101 – при увеличении числа процессов эффективность в целом уменьшается по рассматриваемой области, хотя и менее интенсивно, чем при увеличении размера задачи. Учитывая разницу между максимальным и минимальным значением эффективности в 6,5% можно сделать вывод, что на рассмотренной области снижение эффективности, скорее всего, достаточно равномерное. Снижение эффективности объясняется тем, что при росте вычислительной сложности существенно возрастают объемы передаваемых данных. Могут присутствовать области возрастания эффективности, на всех рассмотренных размерах матрицы. Это может объясняться увеличением вычислительной сложности задачи, что при постоянных накладных расходах на организацию параллельного взаимодействия приводит к общему увеличению эффективности работы.&lt;br /&gt;
*	По размеру задачи:-0.00674– при увеличении размера задачи эффективность в целом уменьшается по рассматриваемой области. Это может свидетельствовать о том, что при увеличении размера задачи возрастают и накладные расходы на организацию параллельного взаимодействия. Так как интенсивность снижения эффективности по этому направлению выше, чем по направлению числа процессов, скорее всего падение интенсивности значительно при малом числе процессов более интенсивное, чем в присутствующих областях возрастания эффективности при большом числе процессов.&lt;br /&gt;
*	По двум направлениям: -6.621e-05 – при рассмотрении увеличения, как вычислительной сложности, так и числа процессов по всей рассмотренной области значений уменьшается, однако интенсивность уменьшения эффективности очень мала. В совокупности с тем фактом, что разница между максимальной и минимальной эффективностью на рассмотренной области значений параметров составляет почти 6,5 % говорит о том, что если на поверхности присутствуют области с очень интенсивным изменением эффективности, но очень малые по площади. На остальной поверхности изменения эффективности незначительны и находятся на приблизительно одном и том же уровне.&lt;br /&gt;
&lt;br /&gt;
 [http://git.algowiki-project.org/Teplov/Scalability/blob/master/Gauss_elimination/Gauss_ACES.c Исследованная параллельная реализация на языке C]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
[[En:Gaussian elimination]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Начатые статьи]]&lt;br /&gt;
[[Категория:Разложения матриц]]&lt;br /&gt;
[[Категория:Решение систем линейных уравнений]]&lt;/div&gt;</summary>
		<author><name>AntonChupin</name></author>
	</entry>
</feed>