<?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=Sergey.protserov</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=Sergey.protserov"/>
	<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/Sergey.protserov"/>
	<updated>2026-10-24T08:43:14Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27648</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27648"/>
		<updated>2019-12-02T19:59:29Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор статьи: Процеров Сергей Дмитриевич, 407 группа ВМК МГУ&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;. Квадратами обозначены данные (элементы матриц и векторов, стоящие в указанных в скобках позициях), кругами обозначены операции, рыжими стрелками обозначены перезаписи данных (переход от &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; в ходе итераций), зелёным цветом обозначена операция умножения матрицы на вектор (см. её информационный граф в статье &amp;lt;ref name=&amp;quot;AW_0&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.98.D0.BD.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B9_.D0.B3.D1.80.D0.B0.D1.84&amp;lt;/ref&amp;gt;), её операнды и результат. Пунктиром обозначен временный вектор, введённый для удобства построения графа алгоритма (он может отсутствовать в реализации).&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&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;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27628</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27628"/>
		<updated>2019-12-01T12:56:18Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += имя автора&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Автор статьи: Процеров Сергей Дмитриевич, 407 группа ВМК МГУ&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;. Квадратами обозначены данные (элементы матриц и векторов, стоящие в указанных в скобках позициях), кругами обозначены операции, пунктирными линиями обозначены перезаписи данных (переход от &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; в ходе итераций), элементы данных и идущие от них стрелки нарисованы разными цветами для наглядности.&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&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;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27627</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27627"/>
		<updated>2019-12-01T12:42:38Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += заголовки разделов&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;. Квадратами обозначены данные (элементы матриц и векторов, стоящие в указанных в скобках позициях), кругами обозначены операции, пунктирными линиями обозначены перезаписи данных (переход от &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; в ходе итераций), элементы данных и идущие от них стрелки нарисованы разными цветами для наглядности.&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&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;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27613</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27613"/>
		<updated>2019-11-29T18:47:26Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;. Квадратами обозначены данные (элементы матриц и векторов, стоящие в указанных в скобках позициях), кругами обозначены операции, пунктирными линиями обозначены перезаписи данных (переход от &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; в ходе итераций), элементы данных и идущие от них стрелки нарисованы разными цветами для наглядности.&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27612</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27612"/>
		<updated>2019-11-29T11:14:50Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27611</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27611"/>
		<updated>2019-11-29T11:06:31Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: fix algo graph&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма в случае матрицы порядка &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Здесь &amp;lt;math&amp;gt;B = D^{-1}A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;c = D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27610</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27610"/>
		<updated>2019-11-28T17:44:24Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: minor fixes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&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;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = y^{n} - D^{-1}Ay^{n} + D^{-1}f,\quad n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма:&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MM&#039;&#039;&#039; обозначает матричное умножение (конкретно — умножение матрицы на вектор), &#039;&#039;&#039;SUB&#039;&#039;&#039; — вычитание векторов, &#039;&#039;&#039;ADD&#039;&#039;&#039; — сложение векторов.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27609</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27609"/>
		<updated>2019-11-28T17:26:46Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += 1.7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
Граф пятого шага алгоритма:&lt;br /&gt;
[[File:S_P_Jacobi_Algo_graph.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MM&#039;&#039;&#039; обозначает матричное умножение (конкретно — умножение матрицы на вектор), &#039;&#039;&#039;SUB&#039;&#039;&#039; — вычитание векторов, &#039;&#039;&#039;ADD&#039;&#039;&#039; — сложение векторов.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&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;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27608</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27608"/>
		<updated>2019-11-28T14:48:09Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += 2.4, 2.7&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Зависимость времени работы алгоритма (100 итераций) в секундах от порядка входной матрицы и количества MPI-процессов:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;|&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; colspan=&amp;quot;7&amp;quot;| Кол-во процессов&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Порядок матрицы&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 1&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 2&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 4&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 8&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 16&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 32&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| 64&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 2500&lt;br /&gt;
| 4.063 с&lt;br /&gt;
| 2.072 с&lt;br /&gt;
| 1.044 с&lt;br /&gt;
| 0.533 с&lt;br /&gt;
| 0.283 с&lt;br /&gt;
| 0.186 с&lt;br /&gt;
| 0.150 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 5000&lt;br /&gt;
| 16.205 с&lt;br /&gt;
| 8.283 с&lt;br /&gt;
| 4.124 с&lt;br /&gt;
| 2.059 с&lt;br /&gt;
| 1.084 с&lt;br /&gt;
| 0.600 с&lt;br /&gt;
| 0.381 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 10000&lt;br /&gt;
| 64.708 с&lt;br /&gt;
| 33.071 с&lt;br /&gt;
| 16.331 с&lt;br /&gt;
| 8.145 с&lt;br /&gt;
| 4.094 с&lt;br /&gt;
| 2.208 с&lt;br /&gt;
| 1.192 с&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| 20000&lt;br /&gt;
| 295.386 с&lt;br /&gt;
| 132.868 с&lt;br /&gt;
| 66.455 с&lt;br /&gt;
| 33.137 с&lt;br /&gt;
| 16.553 с&lt;br /&gt;
| 8.329 с&lt;br /&gt;
| 4.524 с&lt;br /&gt;
|}&lt;br /&gt;
[[File:S_P_Jacobi_Figure_1.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Из приведённых данных видна хорошая слабая масштабируемость алгоритма, а так же тот факт, что увеличение числа процессов с 32 до 64 при входной матрице порядка 2500 уже не даёт значительного выигрыша во времени работы, т.е., что сильная масштабируемость с некоторого момента начинает падать. В исследуемой реализации не осуществляется распараллеливание шагов 2 и 4 алгоритма, т.к. ожидалось, что распределение выполнения &amp;lt;math&amp;gt;2m&amp;lt;/math&amp;gt; операций по процессам не принесёт значительного выигрыша из-за издержек на пересылки множества малых порций данных, а эксперимент показал, что во всех рассмотренных случаях временные затраты на выполнение шагов 2 и 4 в совокупности не превышают &amp;lt;math&amp;gt;4 \cdot 10^{-4}&amp;lt;/math&amp;gt; секунд.&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Авторам статьи не известно о существовании хороших реализаций данного алгоритма.&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27605</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27605"/>
		<updated>2019-11-28T10:10:19Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует BEGIN FIXME один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 5 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний END FIXME, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27576</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27576"/>
		<updated>2019-11-21T11:50:14Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += 1.6, 1.7, 1.9&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Кроме того, можно ограничить максимальное число итераций, задав &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости или достижения максимального числа итераций, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
Кроме того, если в качестве критерия завершения работы алгоритма используется условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, требуется также вычислять указанную величину. В дальнейшем при описании алгоритма мы будем предполагать, что этот критерий не используется, а используется завершение работы по достижении максимального числа итераций.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}A&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = \left(I - D^{-1}A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n = 0,\,1,\,\dots,\,n_{max}&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Шаг 2 предыдущего пункта требует выполнения &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления вещественных чисел, шаг 3 (с учётом того, что матрица &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt; — диагональная) требует выполнения &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения вещественных чисел, аналогично шаг 4 требует &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 7 требует &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; умножений и &amp;lt;math&amp;gt;m^{2} + 2m&amp;lt;/math&amp;gt; сложений/вычитаний.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Шаг 2 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций деления, шаг 3 требует BEGIN FIXME один ярус из &amp;lt;math&amp;gt;m^{2}&amp;lt;/math&amp;gt; операций умножения, шаг 4 требует один ярус из &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций умножения, а каждая итерация шага 7 требует по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; ярусов умножений и сложений (в каждом из ярусов — &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; операций) для выполнения умножения матрицы на вектор &amp;lt;ref name=&amp;quot;AW&amp;quot;&amp;gt;https://algowiki-project.org/ru/%D0%A3%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%BD%D0%B0_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80_(%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B5%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82)#.D0.A0.D0.B5.D1.81.D1.83.D1.80.D1.81_.D0.BF.D0.B0.D1.80.D0.B0.D0.BB.D0.BB.D0.B5.D0.BB.D0.B8.D0.B7.D0.BC.D0.B0_.D0.B0.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D0.B0&amp;lt;/ref&amp;gt; и ещё два яруса по &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; сложений/вычитаний END FIXME, причём итерации выполняются последовательно.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
Входные данные:&lt;br /&gt;
# Вещественная &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;, вообще говоря, плотная&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор правой части &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор начального приближения &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Максимальное число итераций алгоритма &amp;lt;math&amp;gt;n_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходные данные:&lt;br /&gt;
# Вещественный &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;-мерный вектор приближённого решения &amp;lt;math&amp;gt;y^{n_{max}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27464</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27464"/>
		<updated>2019-10-18T12:29:18Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += 1.3, 1.4, 1.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Основное время работы алгоритма приходится на последовательные вычисления векторов &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; по формуле, приведённой в предыдущем пункте, при уже вычисленных в начале работы алгоритма матрице &amp;lt;math&amp;gt;D^{-1}\left(D-A\right)&amp;lt;/math&amp;gt; и векторе &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
В описываемом алгоритме можно выделить следующие макрооперации:&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}\left(D-A\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычисление &amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрооперации 1-3 выполняются единожды, и в силу того, что матрица &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная, занимают лишь незначительную часть времени работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Макрооперация 4 выполняется многократно до наступления сходимости, поэтому она составляет вычислительное ядро алгоритма.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# составить диагональную матрицу &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}\left(D-A\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
# вычислить &amp;lt;math&amp;gt;D^{-1}f&amp;lt;/math&amp;gt;&lt;br /&gt;
# выбрать начальное приближение &amp;lt;math&amp;gt;y_{0}&amp;lt;/math&amp;gt;&lt;br /&gt;
# выбрать константу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
# пока не выполнено условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, выполнять вычисления по формуле &amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n = 0,\,1,\,\dots&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;y^{n}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27462</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27462"/>
		<updated>2019-10-16T14:50:25Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += references&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид &amp;lt;ref name=&amp;quot;MVAAVG&amp;quot;&amp;gt;Абакумов М. В., Гулин А.В. Лекции по численным методам математической физики. - Москва: ИНФРА-М, 2013. - 61 с. &amp;lt;/ref&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;. &amp;lt;ref name=&amp;quot;BR&amp;quot;&amp;gt;Bagnara, Roberto. (2001). A Unified Proof For The Convergence Of Jacobi And Gauss-Seidel Methods. SIAM Review. 37. 10.1137/1037008. &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27461</id>
		<title>Участник:Sergey.protserov/Метод Якоби решения СЛАУ</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Sergey.protserov/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%AF%D0%BA%D0%BE%D0%B1%D0%B8_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%A1%D0%9B%D0%90%D0%A3&amp;diff=27461"/>
		<updated>2019-10-16T14:18:52Z</updated>

		<summary type="html">&lt;p&gt;Sergey.protserov: += 1.1, 1.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритмов ==&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Якоби&#039;&#039;&#039; -- одношаговый стационарный итерационный метод решения СЛАУ вида &amp;lt;math&amp;gt;Ay = f&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;&lt;br /&gt;
A = \left(&lt;br /&gt;
\begin{array}{ccc}&lt;br /&gt;
a_{11} &amp;amp; \dots &amp;amp; a_{1m} \\&lt;br /&gt;
\vdots &amp;amp; \ddots &amp;amp; \vdots \\&lt;br /&gt;
a_{m1} &amp;amp; \dots &amp;amp; a_{mm} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
f = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
f_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
f_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
y = \left(&lt;br /&gt;
\begin{array}{c}&lt;br /&gt;
y_{1} \\&lt;br /&gt;
\vdots \\&lt;br /&gt;
y_{m} \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\right)&lt;br /&gt;
&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\det A \ne 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каноническая форма одношагового стационарного итерационного метода имеет вид:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B\frac{y^{n+1} - y^{n}}{\tau} + Ay^{n} = f, \quad n = 0,\,1,\,\dots\,,&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; — невырожденная матрица &amp;lt;math&amp;gt;m \times m&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\tau \in \mathbb{R}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;y^{0}&amp;lt;/math&amp;gt; — заданное начальное приближение. Решение исходной СЛАУ находится приближённо посредством последовательных итераций. На &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ом шаге находится &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; — очередное приближение для искомого решения &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В методе Якоби &amp;lt;math&amp;gt;\tau = 1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B = D&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; — диагональная матрица, элементы которой совпадают с элементами, стоящими на главной диагонали матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достаточным условием сходимости метода является свойство строгого диагонального преобладания у матрицы &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В обозначениях предыдущего пункта выражение для &amp;lt;math&amp;gt;y^{n+1}&amp;lt;/math&amp;gt; через &amp;lt;math&amp;gt;y^{n}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1} = D^{-1}\left(D-A\right)y^{n} + D^{-1}f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В поэлементной записи:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y^{n+1}_{i} = \frac{1}{a_{ii}}\left(f_{i} - \sum_{j=1,\,j \ne i}^{m}a_{ij}y^{n}_{j}\right),\quad i = 1,\,\dots,\,m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В качестве условия окончания итерационного процесса можно использовать условие &amp;lt;math&amp;gt;\left\lVert y^{n+1} - y^{n}\right\rVert \le \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; — заданная точность. Для оценки ошибки можно использовать невязку &amp;lt;math&amp;gt;Ay^{n+1} - f&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Sergey.protserov</name></author>
	</entry>
</feed>