<?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=SKirill</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=SKirill"/>
	<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/SKirill"/>
	<updated>2026-10-22T23:25:16Z</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=20871</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=20871"/>
		<updated>2016-12-13T18:53:07Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment|VadimVV|Konshin}}&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). При компиляции указывался оптимизационный ключ -O2, использовалась библиотека 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>SKirill</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=20583</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=20583"/>
		<updated>2016-12-10T15:24:19Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость реализации алгоритма */&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 и -O2, использовалась библиотека 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>SKirill</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=18799</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=18799"/>
		<updated>2016-11-21T13:17:35Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&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>SKirill</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=18798</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=18798"/>
		<updated>2016-11-21T13:16:54Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость реализации алгоритма */&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. Эксперименты проводились на суперкомпьютере Ломоносов в разделе 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>SKirill</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=18258</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=18258"/>
		<updated>2016-11-18T19:13:03Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
Формулы метода описаны выше. ниже представлена схема алгоритма, в которой:&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;
При компиляции указывался единственный параметр -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>SKirill</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=18241</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=18241"/>
		<updated>2016-11-18T18:54:07Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость реализации алгоритма */&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;
При компиляции указывался единственный параметр -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>SKirill</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:SKirill&amp;diff=17725</id>
		<title>Обсуждение участника:SKirill</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:SKirill&amp;diff=17725"/>
		<updated>2016-11-16T15:10:16Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Статья [https://algowiki-project.org/ru/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B8:_%D0%A8%D0%BE%D1%85%D0%B8%D0%BD_%D0%9A%D0%B8%D1%80%D0%B8%D0%BB%D0%BB,_%D0%9B%D0%B5%D0%B1%D0%B5%D0%B4%D0%B5%D0%B2_%D0%90%D1%80%D1%82%D0%B5%D0%BC/%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 Метод Ньютона решения систем нелинейных уравнений] ==&lt;br /&gt;
&lt;br /&gt;
=== Замечания ===&lt;br /&gt;
* П. 2.4 - необходимо исследовать масштабируемость не отдельной части (решение СЛАУ), а всего алгоритма. То есть нужно построить ровно такой же график, но получить значения времени выполнения для всей программы. --[[Участник:VadimVV|VadimVV]] ([[Обсуждение участника:VadimVV|обсуждение]]) 13:54, 16 ноября 2016 (MSK)&lt;br /&gt;
&lt;br /&gt;
Это и есть время выполнения всей программы, просто из текста это, видимо, неочевидно.&lt;br /&gt;
[[Участник:SKirill|SKirill]]&lt;br /&gt;
* П. 2.4 - не указана платформа, на которой проводились эксперименты. --[[Участник:VadimVV|VadimVV]] ([[Обсуждение участника:VadimVV|обсуждение]]) 13:54, 16 ноября 2016 (MSK)&lt;br /&gt;
* П. 2.4 - не приведен исходный код реализации. --[[Участник:VadimVV|VadimVV]] ([[Обсуждение участника:VadimVV|обсуждение]]) 13:54, 16 ноября 2016 (MSK)&lt;/div&gt;</summary>
		<author><name>SKirill</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=17409</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=17409"/>
		<updated>2016-11-15T20:04:52Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость реализации алгоритма */&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>SKirill</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=17393</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=17393"/>
		<updated>2016-11-15T19:42:49Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Масштабируемость алгоритма и его реализации */&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;
Результаты измерений представлены на графике. Можно утверждать, что увеличение числа процессоров дает выигрыш во времени, однако, из-за особенностей реализации параллельного решения СЛАУ, при большом количестве узлов и большом размере системы будет осуществляться пересылка между узлами больших объемов данных и возникающие при этом задержки нивелируют выигрыш от увеличения числа процессоров. Поэтому масштабируемость исследуемой реализации весьма ограничена.&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>SKirill</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=14712</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=14712"/>
		<updated>2016-10-29T14:06:01Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&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;
=== Выводы для классов архитектур ===&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>SKirill</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=14708</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=14708"/>
		<updated>2016-10-29T14:02:38Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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;
=== Выводы для классов архитектур ===&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>SKirill</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=14704</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=14704"/>
		<updated>2016-10-29T13:53:35Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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>SKirill</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=14703</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=14703"/>
		<updated>2016-10-29T13:52:50Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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>SKirill</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=14701</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=14701"/>
		<updated>2016-10-29T13:50:05Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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 + 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>SKirill</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=14698</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=14698"/>
		<updated>2016-10-29T13:48:38Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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>SKirill</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=14688</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=14688"/>
		<updated>2016-10-29T11:45:01Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&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>SKirill</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=14685</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=14685"/>
		<updated>2016-10-29T11:41:44Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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;-мерный вектор(начальное приближение решения), &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;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&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&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;3n + 2 \approx 3n&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(\frac{n^2}{3})&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>SKirill</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=14682</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=14682"/>
		<updated>2016-10-29T11:39:10Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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;
&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;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&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&amp;lt;/math&amp;gt; чисел.&lt;br /&gt;
&lt;br /&gt;
Таким образом получим общий объем входных данных(функции, их производные, необходимая точность, максимальное число итераций) равен &amp;lt;math&amp;gt;3n + 2 \approx 3n&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(\frac{n^2}{3})&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>SKirill</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=14676</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=14676"/>
		<updated>2016-10-29T11:20:01Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Ресурс параллелизма алгоритма */&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;
&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;
Выходными данными алгоритма в случае успеха является вектор, который удовлетворяет решению СЛАУ с заданной точностью, в случае выхода количества итераций за заданное ограничение, считается, что алгоритм не смог найти удовлетворяющее ограничениям решение, и выдается сообщение об ошибке.&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>SKirill</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=14674</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=14674"/>
		<updated>2016-10-29T11:17:40Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Последовательная сложность алгоритма */&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;
&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;
Входными данными алгоритма являются:&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>SKirill</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=14654</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=14654"/>
		<updated>2016-10-29T08:40:12Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Входные и выходные данные алгоритма */&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>SKirill</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=14653</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=14653"/>
		<updated>2016-10-29T08:37:33Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Общее описание алгоритма */&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>SKirill</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=7748</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=7748"/>
		<updated>2016-10-14T16:09:25Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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&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;
 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;
**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>SKirill</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=7737</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=7737"/>
		<updated>2016-10-14T16:03:48Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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;
 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;
**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>SKirill</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=7735</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=7735"/>
		<updated>2016-10-14T16:03:17Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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;
 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;
**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>SKirill</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=7720</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=7720"/>
		<updated>2016-10-14T15:54:57Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Существующие реализации алгоритма */&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;
**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>SKirill</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=7717</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=7717"/>
		<updated>2016-10-14T15:53:59Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Существующие реализации алгоритма */&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;
**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_par&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>SKirill</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=7555</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=7555"/>
		<updated>2016-10-14T13:48:09Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Существующие реализации алгоритма */&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>SKirill</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=7508</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=7508"/>
		<updated>2016-10-14T13:22:10Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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.ccas.ru/personal/evtush/p/CMMP1303.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>SKirill</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=7503</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=7503"/>
		<updated>2016-10-14T13:19:49Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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.ccas.ru/personal/evtush/p/CMMP1303.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>SKirill</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=7478</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=7478"/>
		<updated>2016-10-14T13:02:22Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Общее описание алгоритма */&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;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;
=== Информационный граф ===&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.ccas.ru/personal/evtush/p/CMMP1303.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>SKirill</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=7477</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=7477"/>
		<updated>2016-10-14T13:01:31Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Литература */&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;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. ЧИСЛЕННЫЕ МЕТОДЫ — 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;Поляк Б. Т. Метод Ньютона и его роль в оптимизации и вычислительной математике - Труды ИСА РАН 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;
=== Информационный граф ===&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.ccas.ru/personal/evtush/p/CMMP1303.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>SKirill</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=7474</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=7474"/>
		<updated>2016-10-14T13:01:10Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. ЧИСЛЕННЫЕ МЕТОДЫ — 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;Поляк Б. Т. Метод Ньютона и его роль в оптимизации и вычислительной математике - Труды ИСА РАН 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;
=== Информационный граф ===&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.ccas.ru/personal/evtush/p/CMMP1303.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;
&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>SKirill</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=7472</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=7472"/>
		<updated>2016-10-14T13:00:23Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Математическое описание алгоритма */&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;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. ЧИСЛЕННЫЕ МЕТОДЫ — 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;Поляк Б. Т. Метод Ньютона и его роль в оптимизации и вычислительной математике - Труды ИСА РАН 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;
=== Информационный граф ===&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.ccas.ru/personal/evtush/p/CMMP1303.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;
&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>SKirill</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=7470</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=7470"/>
		<updated>2016-10-14T12:59:40Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Общее описание алгоритма */&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;ref name=&amp;quot;Tyrtysh&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;Bahvalov&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. ЧИСЛЕННЫЕ МЕТОДЫ — 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;Поляк Б. Т. Метод Ньютона и его роль в оптимизации и вычислительной математике - Труды ИСА РАН 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;
&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;
**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.ccas.ru/personal/evtush/p/CMMP1303.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;
&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>SKirill</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=7463</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=7463"/>
		<updated>2016-10-14T12:55:19Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Существующие реализации алгоритма */&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;
**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.ccas.ru/personal/evtush/p/CMMP1303.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;
&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>SKirill</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=7396</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=7396"/>
		<updated>2016-10-14T11:47:08Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Последовательная сложность алгоритма */&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>SKirill</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=7298</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=7298"/>
		<updated>2016-10-14T10:36:51Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Программная реализация алгоритма */&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;
Пусть вычисление значения первой производной функции &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>SKirill</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=7297</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=7297"/>
		<updated>2016-10-14T10:36:13Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Программная реализация алгоритма */&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;
Пусть вычисление значения первой производной функции &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;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 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>SKirill</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=7296</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=7296"/>
		<updated>2016-10-14T10:34:22Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Свойства алгоритма */&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;
Пусть вычисление значения первой производной функции &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;
:Тыртышников Е. Е. Методы численного анализа — М., Академия, 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>SKirill</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=7269</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=7269"/>
		<updated>2016-10-14T10:12:40Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Ресурс параллелизма алгоритма */&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;
Пусть вычисление значения первой производной функции &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;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&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>SKirill</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=7266</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=7266"/>
		<updated>2016-10-14T10:11:05Z</updated>

		<summary type="html">&lt;p&gt;SKirill: /* Последовательная сложность алгоритма */&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;
Пусть вычисление значения первой производной функции &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;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&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>SKirill</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=7232</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=7232"/>
		<updated>2016-10-14T09:37:31Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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>SKirill</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=7223</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=7223"/>
		<updated>2016-10-14T09:35:03Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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;\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>SKirill</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=7211</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=7211"/>
		<updated>2016-10-14T09:30:13Z</updated>

		<summary type="html">&lt;p&gt;SKirill: &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)})   (*)&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>SKirill</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=7153</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=7153"/>
		<updated>2016-10-14T08:47:24Z</updated>

		<summary type="html">&lt;p&gt;SKirill: Новая страница: «{{algorithm | name              = Метод Ньютона решения систем нелинейных уравнений | input_data        =  | output_da…»&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;
Таким образом получаем итеративный метод : &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;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&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>SKirill</name></author>
	</entry>
</feed>