<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9B%D0%B5%D0%B1%D0%B5%D0%B4%D0%B5%D0%B2+%D0%90%D1%80%D1%82%D1%91%D0%BC</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9B%D0%B5%D0%B1%D0%B5%D0%B4%D0%B5%D0%B2+%D0%90%D1%80%D1%82%D1%91%D0%BC"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9B%D0%B5%D0%B1%D0%B5%D0%B4%D0%B5%D0%B2_%D0%90%D1%80%D1%82%D1%91%D0%BC"/>
	<updated>2026-10-22T23:02:12Z</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20305</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20305"/>
		<updated>2016-12-07T21:13:28Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена блок-схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рис. 2 изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма, блок-схема итерации алгоритма представлена на рис. 3. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
[[file:NewtoneIteration.png|thumb|center|700px|Рис.3 Блок-схема итерации алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20300</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20300"/>
		<updated>2016-12-07T20:45:06Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена блок-схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рис. 2 изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма, блок-схема итерации алгоритма представлена на рис. 3. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
[[file:NewtoneIteration.png|thumb|center|700px|Рис.3 Блок-схема итерации алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20299</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20299"/>
		<updated>2016-12-07T20:44:44Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена блок-схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рис. 2 изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма, блок-схема итерации алгоритма представлена на рис. 3. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
[[file:NewtoneIteration.png|thumb|center|700px|Рис.3 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20239</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20239"/>
		<updated>2016-12-07T12:21:02Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена блок-схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20238</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20238"/>
		<updated>2016-12-07T12:19:49Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена блок-схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20237</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20237"/>
		<updated>2016-12-07T12:19:34Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. На рис 1. представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20236</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20236"/>
		<updated>2016-12-07T12:17:47Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20235</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=20235"/>
		<updated>2016-12-07T12:17:29Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Блок-Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов в разделе test. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
Использовался компилятор g++, входящий в состав gcc version 4.4.7 20120313 (Red Hat 4.4.7-4). При компиляции указывался единственный параметр -Wall, использовалась библиотека Intel MPI 5.0.1. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18224</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18224"/>
		<updated>2016-11-18T17:22:06Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество ядер процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
В исследуемой реализации использовалась библиотека Intel MPI 5.0.1, при компиляции должен быть указан единственный параметр -Wall. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18223</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18223"/>
		<updated>2016-11-18T17:21:29Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
В исследуемой реализации использовалась библиотека Intel MPI 5.0.1, при компиляции должен быть указан единственный параметр -Wall. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона&amp;quot;&amp;gt;https://github.com/ArtyLebedev/newton&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18222</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18222"/>
		<updated>2016-11-18T17:20:55Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
В исследуемой реализации использовалась библиотека Intel MPI 5.0.1, при компиляции должен быть указан единственный параметр -Wall. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=&amp;quot;Программная реализация метода Ньютона для решения систем нелинейных уравнений&amp;quot;&amp;gt;[https://github.com/ArtyLebedev/newton]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18220</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18220"/>
		<updated>2016-11-18T17:19:41Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right. \qquad(**)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение &amp;lt;math&amp;gt; x_0 = (0.87, 0.87, ..., 0.87) &amp;lt;/math&amp;gt;,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений времени решения системы &amp;lt;math&amp;gt;(**)&amp;lt;/math&amp;gt; в зависимости от размера системы и количества процессоров. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
В исследуемой реализации использовалась библиотека Intel MPI 5.0.1, при компиляции должен быть указан единственный параметр -Wall. Ссылка на программную реализацию метода Ньютона для решения систем нелинейных уравнений: https://github.com/ArtyLebedev/newton &amp;lt;ref name=Программная реализация метода Ньютона для решения систем нелинейных уравнений&amp;quot;&amp;gt;[https://github.com/ArtyLebedev/newton]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18217</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=18217"/>
		<updated>2016-11-18T17:08:02Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096 уравнений, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2. Эксперименты проводились на суперкомпьютере Ломоносов. Исследование проводилось на узлах, обладающих следующими характеристиками:&lt;br /&gt;
&lt;br /&gt;
*Количество ядер: 8 ядер архитектуры x86&lt;br /&gt;
*Количество памяти: 12Гб&lt;br /&gt;
*Количество GPU: 0&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17408</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17408"/>
		<updated>2016-11-15T20:02:51Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений, можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения системы уравнений, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17407</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17407"/>
		<updated>2016-11-15T20:00:28Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений, размер системы во время измерений изменялся с 1024 до 4096 с шагом 512. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения системы уравнений, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17405</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17405"/>
		<updated>2016-11-15T20:00:00Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений, размер системы во время измерений изменялся с 1024 до 4096 с шагом 512. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17404</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17404"/>
		<updated>2016-11-15T19:59:32Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений, размер системы во время измерений менялся с 1024 до 4096 с шагом 512. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17402</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17402"/>
		<updated>2016-11-15T19:58:04Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений, можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17400</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=17400"/>
		<updated>2016-11-15T19:57:24Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оставаясь в предположениях, описанных при вычислении объема входных данных, имеем объем входных данных равный &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
Так как алгоритм по сути своей является последовательным, то масштабируемость конкретной реализации алгоритма определяется масштабируемостью реализации алгоритма решения СЛАУ, используемого для нахождения изменения текущего решения на очередной итерации.&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
В исследуемой реализации для решения СЛАУ использовался метод Гаусса. Исследование проводилось для систем размером от 1024 до 4096, с шагом 512. Исследуемая система имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
cos(x_1) - 1 = 0,&lt;br /&gt;
\\ cos(x_2) - 1 = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ cos(x_n) - 1 = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная система выбрана так как для нее известно решение, а также известно начальное приближение,  при котором метод Ньютона успешно сходится.&lt;br /&gt;
&lt;br /&gt;
Количество процессоров, на которых производились вычисления, изменялось от 16 до 128 по степеням 2.&lt;br /&gt;
&lt;br /&gt;
На рис. 3 показаны результаты измерений. можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&lt;br /&gt;
&lt;br /&gt;
 [[file:Снимок экрана 2016-11-15 в 22.36.33.png|thumb|center|700px|Рис.3 Время решения системы уравнений в зависимости от числа процессоров и размера задачи]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14707</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14707"/>
		<updated>2016-10-29T13:59:02Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Учитывая список предположений из пункта 1.9, общий объем входных данных(функции, их производные, начальное приближение решения, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14706</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14706"/>
		<updated>2016-10-29T13:58:20Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
При определении объема входных и выходных данных алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений.&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически.&lt;br /&gt;
# Точность, с которой требуется найти решение.&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано.&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Учитывая список предположений в пункте 1.9, общий объем входных данных(функции, их производные, начальное приближение решения, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14705</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14705"/>
		<updated>2016-10-29T13:57:21Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&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;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Учитывая список предположений в пункте 1.9, общий объем входных данных(функции, их производные, начальное приближение решения, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса: &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14702</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14702"/>
		<updated>2016-10-29T13:51:42Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&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;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2\cdot n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2\cdot n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При определении вычислительной мощности алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
&lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, начальное приближение, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + 2\cdot n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14700</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14700"/>
		<updated>2016-10-29T13:49:32Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&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;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2 * n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2 * n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При определении вычислительной мощности алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
&lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14699</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14699"/>
		<updated>2016-10-29T13:48:57Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&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;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2 * n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные (&amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; адресов частных производных &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций по &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменным, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; адресов функций, образующих систему уравнений, &amp;lt;math&amp;gt;n-мерный&amp;lt;/math&amp;gt; вектор начального приближения, требуемая точность и максимальное количество итераций), когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2 * n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При определении вычислительной мощности алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
&lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14695</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14695"/>
		<updated>2016-10-29T13:43:16Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; частных производных этих функций по каждой переменной, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения), &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность, &amp;lt;math&amp;gt;max\_iter&amp;lt;/math&amp;gt; - максимальное число итераций&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идее линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим метод Ньютона, использующий для решения СЛАУ параллельный вариант метода Гаусса, в котором между процессорами распределяются строки исходной матрицы. Оставаясь в тех же предположениях, что были сделаны при вычислении оценки последовательной сложности, получим оценку параллельной сложности алгоритма.&lt;br /&gt;
&lt;br /&gt;
Пусть задача решается на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; процессорах, тогда сложность решения СЛАУ имеет оценку &amp;lt;math&amp;gt;O(\frac{n^3}{p})&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;\frac{n}{p}&amp;lt;/math&amp;gt; функций, поэтому для вычисления элементов матрицы Якоби и правой части СЛАУ потребуется &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Таким образом, получаем следующую оценку параллельной сложности одной итерации алгоритма: &amp;lt;math&amp;gt;O(\frac{n^2}{p}) + O(\frac{n^3}{p}) + O(n) = O(\frac{n^3}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot \frac{n^3}{p})&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;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Объем входных данных алгоритма равен &amp;lt;math&amp;gt;n ^2 + 2 * n + 2 &amp;lt;/math&amp;gt; в случае, когда на вход алгоритму передаются частные производные, когда частные производные приближенно вычисляются непосредственно в программе, объем входных данных равен &amp;lt;math&amp;gt;2 * n + 2.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt;n.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При определении вычислительной мощности алгоритма будем придерживаться следующих предположений:&lt;br /&gt;
&lt;br /&gt;
*Рассматривается 64-битная система, таким образом каждый адрес занимает 64 бита.&lt;br /&gt;
&lt;br /&gt;
*Все числа, с которыми оперирует алгоритм также занимают 64 бита. &lt;br /&gt;
&lt;br /&gt;
*Каждая функция будет представлена своим адресом, таким образом вклад функций в объем входных данных будет равен &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
*Производная каждой функции также представлена своим адресом, и вклад производных в объем входных данных также будет равен &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;n^2 + n + 2 = O(n^2)&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Оценку числа операций возьмем для реализации метода Ньютона с помощью метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;. Тогда вычислительная мощность есть &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14647</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14647"/>
		<updated>2016-10-29T07:45:55Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;.&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14646</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14646"/>
		<updated>2016-10-29T07:44:36Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14645</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14645"/>
		<updated>2016-10-29T07:44:10Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис.2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14644</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14644"/>
		<updated>2016-10-29T07:43:44Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис.1 Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис. 2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14643</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14643"/>
		<updated>2016-10-29T07:41:37Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис. 2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14642</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14642"/>
		<updated>2016-10-29T07:41:18Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис. 2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14641</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14641"/>
		<updated>2016-10-29T07:40:36Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)}).&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис. 2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14640</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14640"/>
		<updated>2016-10-29T07:35:58Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[file:infograph.png|thumb|center|700px|Рис. 2 Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14597</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14597"/>
		<updated>2016-10-28T20:33:36Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
# n - число уравнений в СЛАУ&lt;br /&gt;
# Max - предельное число итераций&lt;br /&gt;
# &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
# &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14596</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14596"/>
		<updated>2016-10-28T20:33:16Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
 # n - число уравнений в СЛАУ&lt;br /&gt;
 # Max - предельное число итераций&lt;br /&gt;
 # &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
 # &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[file:NewtonScheme.png|thumb|center|700px|Рис1. Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14587</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=14587"/>
		<updated>2016-10-28T20:23:48Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]](1.1,1.2,1.4,1.6,1.8,1.10,2.7), [[Участник:Лебедев Артём|Лебедев А.А.]](1.1,1.3,1.5,1.7,1.9,2.7)&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
# Функции, образующие систему уравнений&lt;br /&gt;
# Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
# Точность, с которой требуется найти решение&lt;br /&gt;
# Максимальное число итераций, которое может быть проделано&lt;br /&gt;
# Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**PETSc. Язык реализации - C, есть интерфейс для Java и Python. Распространяется&amp;lt;ref name =  PETSC&amp;gt;https://www.mcs.anl.gov/petsc/&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7693</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7693"/>
		<updated>2016-10-14T15:40:37Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;, если для решения СЛАУ использовать метод Гаусса, алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, вычисление значения каждой функции системы и их производных в точке имеет оценку сложности &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; производных этих функций, &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор(начальное приближение решения)&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона&amp;lt;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. &amp;quot;Методы численного анализа&amp;quot; — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. &amp;quot;Численные Методы&amp;quot; — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt; решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : \R^1 \to \R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году&amp;lt;ref name = Polyak&amp;gt;Поляк Б. Т. &amp;quot;Метод Ньютона и его роль в оптимизации и вычислительной математике&amp;quot; - Труды ИСА РАН 2006. Т. 28&amp;lt;/ref&amp;gt;. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : \R^n \to \R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть алгоритм сойдется за &amp;lt;math&amp;gt;L&amp;lt;/math&amp;gt; итераций, тогда итоговая сложность будет равна  &amp;lt;math&amp;gt;O(L \cdot n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
 1. Функции, образующие систему уравнений&lt;br /&gt;
 2. Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
 3. Точность, с которой требуется найти решение&lt;br /&gt;
 4. Максимальное число итераций, которое может быть проделано&lt;br /&gt;
 5. Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset \R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in \R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
*Последовательные реализации&lt;br /&gt;
**ALIAS C++. Язык реализации - C++. Распространяется бесплатно, исходные коды и примеры использования можно скачать на сайте&amp;lt;ref name=&amp;quot;ALIAS&amp;quot;&amp;gt;https://www-sop.inria.fr/coprin/logiciels/ALIAS/ALIAS-C++/ALIAS-C++.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Numerical Recipes. Язык реализации - C++. Исходный код можно найти в секции 9.7 книги Numerical recipes(third edition)&amp;lt;ref name=&amp;quot;RECIPES&amp;quot;&amp;gt;http://numerical.recipes&amp;lt;/ref&amp;gt;. Бесплатно доступны&amp;lt;ref name=&amp;quot;RECIPES_old&amp;quot;&amp;gt;http://numerical.recipes/oldverswitcher.html&amp;lt;/ref&amp;gt; предыдущие издания для языков C, Fortran77, Fortran90.&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_seq&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD. &lt;br /&gt;
**Numerical Mathematics- NewtonLib. Язык реализации - C, Fortran. Исходные коды доступны&amp;lt;ref name=&amp;quot;LIB_book&amp;quot;&amp;gt;http://elib.zib.de/pub/elib/codelib/NewtonLib/index.html&amp;lt;/ref&amp;gt; в качестве приложения к книге&amp;lt;ref name=&amp;quot;LIB&amp;quot;&amp;gt;https://www.amazon.com/Newton-Methods-Nonlinear-Problems-Computational/dp/364223898X/&amp;lt;/ref&amp;gt; Peter Deuflhards &amp;quot;Newton Methods for Nonlinear Problems -- Affine Invariance and Adaptive Algorithms&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Параллельные реализации&lt;br /&gt;
**Sundials. Язык реализации - C, также есть интерфейс для использования в Fortran-программах. Распространяется&amp;lt;ref name=&amp;quot;SUNDIALS_par&amp;quot;&amp;gt;http://computation.llnl.gov/projects/sundials/kinsol&amp;lt;/ref&amp;gt; по лицензии BSD.&lt;br /&gt;
**Построение параллельной реализации метода Ньютона для решения задач оптимизации, описываются в работе V. A. Garanzha, A. I. Golikov, Yu. G. Evtushenko, and M. Kh. Nguen &amp;quot;Parallel Implementation of Newton’s Method for Solving Large-Scale Linear Programs&amp;quot; &amp;lt;ref name=&amp;quot;IMPL_OPT&amp;quot;&amp;gt;http://www.ccas.ru/personal/evtush/p/CMMP1303.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Построение параллельной реализации метода Ньютона, а также результаты некоторых экспериментов, описываются в работе Renato N. Elias Alvaro L. G. A. Coutinho Marcos A. D. Martins Rubens M. Sydenstricker  &amp;quot;PARALLEL INEXACT NEWTON-TYPE METHODS FOR THE SUPG/PSPG SOLUTION OF STEADY INCOMPRESSIBLE 3D NAVIER-STOKES EQUATIONS IN PC CLUSTERS&amp;quot; &amp;lt;ref name=&amp;quot;SUPG&amp;quot;&amp;gt;http://www.nacad.ufrj.br/~rnelias/papers/CIL14-020.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
**Описание использования и результатов экспериментов с параллельной реализацией метода Ньютона в задаче фильтрации вязкой сжимаемой многофазной многокомпонентной смеси в пористой среде описано в работе К.Ю.Богачева &amp;quot;Эффективное решение задачи фильтрации вязкой сжимаемой многофазной многокомпонентной смеси на параллельных ЭВМ&amp;quot;&amp;lt;ref name=&amp;quot;BOGACHEV&amp;quot;&amp;gt;http://academy.hpc-russia.ru/files/reservoirdynamics_bogachev.pdf&amp;lt;/ref&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>Лебедев Артём</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7418</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7418"/>
		<updated>2016-10-14T12:25:57Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
 1. Функции, образующие систему уравнений&lt;br /&gt;
 2. Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
 3. Точность, с которой требуется найти решение&lt;br /&gt;
 4. Максимальное число итераций, которое может быть проделано&lt;br /&gt;
 5. Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7416</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7416"/>
		<updated>2016-10-14T12:22:14Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
 1. Функции, образующие систему уравнений&lt;br /&gt;
 2. Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
 3. Точность, с которой требуется найти решение&lt;br /&gt;
 4. Максимальное число итераций, которое может быть проделано&lt;br /&gt;
 5. Начальное приближение &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7415</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7415"/>
		<updated>2016-10-14T12:21:52Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
 1. Функции, образующие систему уравнений&lt;br /&gt;
 2. Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
 3. Точность, с которой требуется найти решение&lt;br /&gt;
 4. Максимальное число итераций, которое может быть проделано&lt;br /&gt;
 5. Начальное приближение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7406</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7406"/>
		<updated>2016-10-14T11:56:30Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входными данными алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
 1. Функции, образующие систему уравнений&lt;br /&gt;
 2. Производные функций, образующих систему уравнений, если их можно задать аналитически&lt;br /&gt;
 3. Точность, с которой требуется найти решение&lt;br /&gt;
 4. Максимальное число итераций, которое может быть проделано&lt;br /&gt;
&lt;br /&gt;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итерации за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение и выдается сообщение об ошибке&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7398</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7398"/>
		<updated>2016-10-14T11:48:18Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению элементов матрицы Якоби), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:infograph.png|Информационный граф алгоритма]]&lt;br /&gt;
&lt;br /&gt;
На рисунке изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, необходимой точности. Каждый блок IT соответствует одной итерации алгоритма. Блок OUT соответствует успешному окончанию алгоритма. &lt;br /&gt;
&lt;br /&gt;
Как видно, алгоритм является строго последовательным, каждая итерация зависит от результата предыдущей&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7380</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7380"/>
		<updated>2016-10-14T11:38:54Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png|Схема реализации последовательного алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению якобиана), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7375</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7375"/>
		<updated>2016-10-14T11:35:49Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению якобиана), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7314</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7314"/>
		<updated>2016-10-14T10:48:19Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&lt;br /&gt;
&lt;br /&gt;
  1. n - число уравнений в СЛАУ&lt;br /&gt;
  2. Max - предельное число итераций&lt;br /&gt;
  3. &amp;lt;math&amp;gt;\xi&amp;lt;/math&amp;gt; - точность вычислений&lt;br /&gt;
  4. Набор &amp;lt;math&amp;gt;x_i, i = 1..n&amp;lt;/math&amp;gt; - начальное приближение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Файл:NewtonScheme.png]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению якобиана), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7308</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7308"/>
		<updated>2016-10-14T10:43:54Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
 [[Файл:NewtonScheme.png]]&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Пусть вычисление значения первой производной функции &amp;lt;math&amp;gt;f_i(x_1,x_2,\ldots,x_n)&amp;lt;/math&amp;gt; в точке &amp;lt;math&amp;gt;x^{(k)}&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;, решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; имеет оценку сложности &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;(в эту оценку также включаются операции по нахождению якобиана), а оценка сложности сложения векторов – &amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt;. Тогда оценка сложности одной итерации представляется в виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum^{n}_{i=1} {D_i} + S + V&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Количество итераций определяется скоростью сходимости алгоритма.&lt;br /&gt;
Скорость сходимости метода Ньютона в общем случае является квадратичной. Однако успех или неуспех применения алгоритма во многом определяется выбором начального приближения решения. Если начальное приближение выбрано достаточно хорошо и матрица системы линейных уравнений на каждой итерации хорошо обусловлена и имеет обратную матрицу, то метод Ньютона сходится к единственному в данной окрестности решению. На практике критерием работоспособности метода является число итераций: если оно оказывается большим (для большинства задач &amp;gt;100), то начальное приближение выбрано плохо.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно рассмотреть алгоритм Ньютона, использующий для решения СЛАУ метод Гаусса. Рассмотрим решение системы, для которой справедливы следующие предположения:&lt;br /&gt;
&lt;br /&gt;
* Вычисление значения каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
* Вычисление значения производной каждой функции в заданной точке требует &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; операций.&lt;br /&gt;
&lt;br /&gt;
Предположим также, что выполнены все условия для квадратичной сходимости метода, и не для решения системы потребуется небольшое(&amp;lt;100) количество итераций.&lt;br /&gt;
&lt;br /&gt;
В таких предположениях указанное выражение для вычисления сложности примет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;O(n^2) + O(n^3) + O(n) = O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Хоть сам по себе алгоритм и является строго последовательным, в нем все же присутствует возможность ускорить выполнение за счет распараллеливания.&lt;br /&gt;
Основной ресурс параллелизма заключен в решении СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;. Применять можно любой из известных алгоритмов, ориентируясь на известные особенности структуры матрицы Якоби исходной системы.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Соотношение последовательной и параллельной сложностей зависит от того, какие алгоритмы применяются для решения СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Результат работы алгоритма сильно зависит от выбора начального приближения решения. При удачном выборе алгоритм достаточно быстро сходится к искомому решению. Глобальная сходимость для многих задач отсутствует. &lt;br /&gt;
&lt;br /&gt;
Существует теорема о достаточном условии сходимости метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
Пусть функция &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; непрерывно дифференцируема в открытом выпуклом множестве &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;. Предположим, что существуют &amp;lt;math&amp;gt;\overline{x^*} \in R^n&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r,\beta &amp;gt; 0 &amp;lt;/math&amp;gt;, такие что &amp;lt;math&amp;gt;N(\overline{x^*},r) \subset G , F(\overline{x^*}) = 0&amp;lt;/math&amp;gt;  , и существует &amp;lt;math&amp;gt;W^{-1}(\overline{x^*})&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;\left \| W^{-1}(\overline{x^*})\right \| \le \beta &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(x) \in Lip_{\gamma} (N(\overline{x^*},r))&amp;lt;/math&amp;gt;. Тогда существует &amp;lt;math&amp;gt;\varepsilon &amp;gt; 0&amp;lt;/math&amp;gt; такое, что для всех &amp;lt;math&amp;gt;x^{(0)} \in N(\overline{x^*}, \varepsilon)&amp;lt;/math&amp;gt; последовательность &amp;lt;math&amp;gt;x^{(1)},x^{(2)},\ldots&amp;lt;/math&amp;gt; порождаемая итерационным процессом сходится к &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; и удовлетворяет неравенству &amp;lt;math&amp;gt;\left \|x^{(k+1)} - \overline{x^*}\right \| \le \beta\cdot\gamma\cdot{\left \| x^{(k)}- \overline{x^*}\right \|}^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Использовались следующие обозначения:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt; - открытая окрестность радиуса &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; с центром в точке &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;W(x) \in Lip_{\gamma}(N(x,r))&amp;lt;/math&amp;gt; означает, что &amp;lt;math&amp;gt;W(x)&amp;lt;/math&amp;gt; непрерывна по Липшицу с константой &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; в области &amp;lt;math&amp;gt;N(x,r)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7238</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7238"/>
		<updated>2016-10-14T09:40:46Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt; на очередной итерации: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7229</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7229"/>
		<updated>2016-10-14T09:36:40Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения значения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt;, на очередной итерации вычисляется значение: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Как уже было сказано, основную часть каждой итерации метода составляет нахождение матрицы Якоби и решение СЛАУ &amp;lt;math&amp;gt;(*)&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7213</id>
		<title>Участник:SKirill/Метод Ньютона решения систем нелинейных уравнений</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:SKirill/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%BD%D0%B5%D0%BB%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D1%85_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=7213"/>
		<updated>2016-10-14T09:30:46Z</updated>

		<summary type="html">&lt;p&gt;Лебедев Артём: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Метод Ньютона решения систем нелинейных уравнений&lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:SKirill|Шохин К.О.]], [[Участник:Лебедев Артём|Лебедев А.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Метод Ньютона решения систем нелинейных уравнений является обобщением метода Ньютона решения нелинейных уравнений, который основан на идеи линеаризации. Пусть &amp;lt;math&amp;gt; F(x) : R^1 \to R^1&amp;lt;/math&amp;gt; - дифференцируемая функция и необходимо решить уравнение &lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Взяв некоторое &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; в качестве начального приближения решения, мы можем построить линейную аппроксимацию &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; в окрестности &amp;lt;math&amp;gt;x_0 : F(x_0+h) \approx F(x_0)+F^&#039;(x_0)h&amp;lt;/math&amp;gt; и решить получающееся линейное уравнение &amp;lt;math&amp;gt;F(x_0 )+F^&#039; (x_0 )h =0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Таким образом получаем итеративный метод : &amp;lt;math&amp;gt; x_{k+1} = x_k - {F^&#039;(x_k)}^{-1}F(x_k) , k = 0,1,\ldots &amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Данный метод был предложен Ньютоном в 1669 году. Более точно, Ньютон оперировал только с полиномами; в выражении для &amp;lt;math&amp;gt;F(x+h)&amp;lt;/math&amp;gt;  он отбрасывал члены более высокого порядка по h , чем линейные.  Ученик Ньютона Рафсон в 1690 г. предложил общую форму метода (т. е. не предполагалось что &amp;lt;math&amp;gt;F(x)&amp;lt;/math&amp;gt; обязательно полином и использовалось понятие производной),  поэтому часто говорят о методе Ньютона—Рафсона.&lt;br /&gt;
Дальнейшее развитие исследований связано с именами таких известных математиков, как Фурье, Коши и другие. Например, Фурье доказал в 1818 г., что метод сходится квадратично в окрестности корня, а Коши (1829, 1847) предложил многомерное обобщение метода и использовал метод для доказательства существования решения уравнения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть дана система из &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; нелинейных уравнений с &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; неизвестными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}&lt;br /&gt;
f_1(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ f_2(x_1, \ldots, x_n) = 0,&lt;br /&gt;
\\ \vdots&lt;br /&gt;
\\ f_n(x_1, \ldots, x_n) = 0.&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
, где &amp;lt;math&amp;gt;f_i(x_1, \ldots,x_n) : R^n \to R, i = 1, \ldots ,n&amp;lt;/math&amp;gt; - нелинейные функции, определенные и непрерывно дифференцируемые в некоторой &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
области &amp;lt;math&amp;gt;G \subset R^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем ее в векторном виде: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\overline{x} = {(x_1,x_2,\ldots,x_n)}^T, F(x) ={[f_1(x),f_2(x),\ldots,f_n(x)]}^T, F(x)=0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Требуется найти такой вектор &amp;lt;math&amp;gt;\overline{x^*} = {(x^*_1,x^*_2,\ldots,x^*_n)}^T&amp;lt;/math&amp;gt;, который, при подстановке в исходную систему, превращает каждое уравнение в верное числовое равенство.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При таком подходе формула для нахождения решения является естественным обобщением формулы одномерного итеративного метода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} - W^{-1}(x^{(k)})\cdot F(x^{(k)}) , k=0,1,2,\ldots&amp;lt;/math&amp;gt;, где &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; W = \begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}&lt;br /&gt;
\\ \vdots &amp;amp;  \ddots &amp;amp; \vdots&lt;br /&gt;
\\ \frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&amp;lt;/math&amp;gt; – матрица Якоби.&lt;br /&gt;
&lt;br /&gt;
В рассмотренных предположениях относительно функции &amp;lt;math&amp;gt;F(\cdot)&amp;lt;/math&amp;gt; при выборе начального приближения &amp;lt;math&amp;gt;x^{(0)}&amp;lt;/math&amp;gt; из достаточно малой окрестности решения &amp;lt;math&amp;gt;\overline{x^*}&amp;lt;/math&amp;gt; имеет место сходимость последовательности &amp;lt;math&amp;gt;\{x^{(k)}\}&amp;lt;/math&amp;gt;. При дополнительном предположении &amp;lt;math&amp;gt;F(\cdot) \in C^2&amp;lt;/math&amp;gt; имеет место квадратичная сходимость метода.&lt;br /&gt;
&lt;br /&gt;
В качестве критерия окончания процесса итераций обычно берут условие &amp;lt;math&amp;gt;\left \| x^{(k+1)} - x^{(k)} \right \| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - требуемая точность решения.&lt;br /&gt;
&lt;br /&gt;
Основная сложность метода Ньютона заключается в обращении матрицы Якоби. Вводя обозначение &amp;lt;math&amp;gt;\Delta x^{(k)} = x^{(k+1)} - x^{(k)}&amp;lt;/math&amp;gt; получаем СЛАУ для вычисления &amp;lt;math&amp;gt;\Delta x^{(k)}:&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{(k)})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)}+ \Delta x^{(k)}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Часто метод Ньютона модифицируют следующим образом. По ходу вычислений или заранее выбирают возрастающую последовательность чисел &amp;lt;math&amp;gt;n_0=0, n_1,\ldots&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При &amp;lt;math&amp;gt;n_i \le k &amp;lt; n_{i+1}&amp;lt;/math&amp;gt; вычисление &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt; осуществляют по следующей формуле:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial{F(x^{n_i})}}{\partial{x}} = -F(x^{(k)})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Увеличение числа итераций, сопровождающее такую модификацию, компенсируется «дешевизной» одного шага итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основная вычислительная нагрузка алгоритма заключается в решении СЛАУ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{(k)})}{\partial x}\Delta x^{(k)} = -F(x^{(k)}) \qquad(*)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для нахождения значения &amp;lt;math&amp;gt;\Delta x^{(k)}&amp;lt;/math&amp;gt;, по которому вычисляется значение вектора &amp;lt;math&amp;gt;\overline{x}&amp;lt;/math&amp;gt;, на очередной итерации вычисляется значение: &amp;lt;math&amp;gt;x^{(k+1)} = x^{(k)} + \Delta x^{(k)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&lt;br /&gt;
&lt;br /&gt;
:Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Лебедев Артём</name></author>
	</entry>
</feed>