<?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=Dimx19</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=Dimx19"/>
	<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/Dimx19"/>
	<updated>2026-10-22T23:19:52Z</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20607</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20607"/>
		<updated>2016-12-10T23:34:57Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;x = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;x = x + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton004.png|1000px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован нами самостоятельно на библиотеке CUDA 8.0 для языка C++(компилятор nvcc) для Windows на домашнем компьютере(OS Windows 10 x64, CPU Intel Core i7-2600 3.4 GHz, 8 GB RAM, GPU NVIDIA GTX 550 Ti). GPU поддерживает спецификацию  CUDA 2.1 и максимальное число потоков в блоке [https://ru.wikipedia.org/wiki/CUDA 1024]. Однако физически у нас есть всего 192 CUDA ядра(см [http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-550ti/specifications спецификации] видеокарты). Все потоки должны быть элементами двумерного квадратного блока. Поэтому исследования масштабируемости были проведены на 4, 16, 36, 64, 100, 144, 196, 256, 324, 400 потоках(на большем количестве потоков проводить исследования бессмысленно ввиду ухудшения производительности). Параметры компиляции: &lt;br /&gt;
&amp;lt;source&amp;gt;&amp;quot;nvcc.exe&amp;quot; -gencode=arch=compute_20,code=\&amp;quot;sm_20,compute_20\&amp;quot; --use-local-env --cl-version 2015 -ccbin &amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin&amp;quot;  -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot; -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot;  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler &amp;quot;/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd &amp;quot; -o Debug\kernel.cu.obj &amp;quot;kernel.cu&amp;quot; &amp;lt;/source&amp;gt;&lt;br /&gt;
Решение СЛАУ было реализовано в 2 этапа: &lt;br /&gt;
&lt;br /&gt;
1)Нахождение обратной матрицы с помощью метода Гаусса-Жордана. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void gaussjordan(float *A, float *I, int n, int i)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2)Умножение обратной матрицы на вектор правых частей. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void multiply_by_vec(float *mat, float *vec, float *out, const int N)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо сказать, что использование своих ядер для CUDA непременно ведет к снижению производительности. Для улучшения производительности предпочтительно использовать матричные операции из библиотеки cuBLAS. Однако, при таком подходе невозможно явно задать количество потоков - для конкретной видеокарты сама библиотека выбирает, какое количество потоков ей использовать. В связи с этим и были написаны свои ядра, позволяющие задавать количество потоков.&lt;br /&gt;
&lt;br /&gt;
Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. С нашей реализацией можно ознакомиться [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функций и их производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1100px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Как уже было сказано, из-за наличия только 192 физических процессоров, данный алгоритм показывает лучшее время работы при использовании 144 либо 256 потоков. 144 потока (размер блока 12х12) - наиболее близкое количество потоков к 192 физическим процессорам. Хорошее время работы на 256 потоках объясняется тем, что мы используем стандартный размер блока 16х16, а так же многие операции деления или умножения на количество потоков или размер блока в этом случае компилятор может заменить на операции побитового сдвига, которые работают быстрее обычных.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium&amp;diff=20506</id>
		<title>Обсуждение участника:Oleggium</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:Oleggium&amp;diff=20506"/>
		<updated>2016-12-09T23:21:44Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Статья [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]] ==&lt;br /&gt;
&lt;br /&gt;
=== Замечания ===&lt;br /&gt;
&lt;br /&gt;
* п.1.5 &amp;quot;result&amp;quot; лучше обозначить какой-нибудь латинской буквой как математическую величину [+]&lt;br /&gt;
* п.1.7 лучше заменить термин &amp;quot;надбавка&amp;quot; [+]&lt;br /&gt;
* п.1.7 граф выглядит достаточно элегантно, но показаны не все связи между этапами [?]&lt;br /&gt;
&#039;&#039;Между какими этапами необходимо указать связь? По нашему мнению все связи указаны&#039;&#039;&lt;br /&gt;
Давайте сделаем так:&lt;br /&gt;
** в п.1.7 вы сначала раречислите все этапы алгоритма (как в легенде на рисунке, только желательно поподробнее);&lt;br /&gt;
** потом по каждому этапу перечислите входные и выходные данные (как в п.1.9, только получится подробнее),&lt;br /&gt;
а там уже будет видно, придется ли добавить новые стрелочки&lt;br /&gt;
* п.1.9 конкретно указать также объемы входных и выходных данных [+]&lt;br /&gt;
&#039;&#039;В пункте конктерно указан ти и размер входных и выходных данных, что еще требуется указать?&#039;&#039;&lt;br /&gt;
** хотелось как в более простых алгоритмах в конце пункта обойтись только упоминает количества (объема данных) &amp;quot;n&amp;quot;, но давайте лучше оставим как есть у вас для большей ясности&lt;br /&gt;
&lt;br /&gt;
п.2.4 [+]&lt;br /&gt;
* добавьте, пожалуйста, слова о том что это ваша самостоятельная реализация&lt;br /&gt;
* обидно, что вы сократили рассмотрение масштабируемости алгоритма до решения СЛАУ&lt;br /&gt;
* тогда уж напишите подробно, какой метод решения СЛАУ вы использовали&lt;br /&gt;
* в самом конце добавьте свои соображения почему нет ускорения при числе потоков больше 256&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20505</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20505"/>
		<updated>2016-12-09T23:19:29Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;x = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;x = x + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton002.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован нами самостоятельно на библиотеке CUDA 8.0 для языка C++(компилятор nvcc) для Windows на домашнем компьютере(OS Windows 10 x64, CPU Intel Core i7-2600 3.4 GHz, 8 GB RAM, GPU NVIDIA GTX 550 Ti). GPU поддерживает спецификацию  CUDA 2.1 и максимальное число потоков в блоке [https://ru.wikipedia.org/wiki/CUDA 1024]. Однако физически у нас есть всего 192 CUDA ядра(см [http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-550ti/specifications спецификации] видеокарты). Все потоки должны быть элементами двумерного квадратного блока. Поэтому исследования масштабируемости были проведены на 4, 16, 36, 64, 100, 144, 196, 256, 324, 400 потоках(на большем количестве потоков проводить исследования бессмысленно ввиду ухудшения производительности). Параметры компиляции: &lt;br /&gt;
&amp;lt;source&amp;gt;&amp;quot;nvcc.exe&amp;quot; -gencode=arch=compute_20,code=\&amp;quot;sm_20,compute_20\&amp;quot; --use-local-env --cl-version 2015 -ccbin &amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin&amp;quot;  -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot; -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot;  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler &amp;quot;/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd &amp;quot; -o Debug\kernel.cu.obj &amp;quot;kernel.cu&amp;quot; &amp;lt;/source&amp;gt;&lt;br /&gt;
Решение СЛАУ было реализовано в 2 этапа: &lt;br /&gt;
&lt;br /&gt;
1)Нахождение обратной матрицы с помощью метода Гаусса-Жордана. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void gaussjordan(float *A, float *I, int n, int i)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2)Умножение обратной матрицы на вектор правых частей. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void multiply_by_vec(float *mat, float *vec, float *out, const int N)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо сказать, что использование своих ядер для CUDA непременно ведет к снижению производительности. Для улучшения производительности предпочтительно использовать матричные операции из библиотеки cuBLAS. Однако, при таком подходе невозможно явно задать количество потоков - для конкретной видеокарты сама библиотека выбирает, какое количество потоков ей использовать. В связи с этим и были написаны свои ядра, позволяющие задавать количество потоков.&lt;br /&gt;
&lt;br /&gt;
Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. С нашей реализацией можно ознакомиться [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функций и их производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1100px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Как уже было сказано, из-за наличия только 192 физических процессоров, данный алгоритм показывает лучшее время работы при использовании 144 либо 256 потоков. 144 потока (размер блока 12х12) - наиболее близкое количество потоков к 192 физическим процессорам. Хорошее время работы на 256 потоках объясняется тем, что мы используем стандартный размер блока 16х16, а так же многие операции деления или умножения на количество потоков или размер блока в этом случае компилятор может заменить на операции побитового сдвига, которые работают быстрее обычных.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20503</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20503"/>
		<updated>2016-12-09T23:02:30Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;x = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;x = x + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton002.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован нами самостоятельно на библиотеке CUDA 8.0 для языка C++(компилятор nvcc) для Windows на домашнем компьютере(OS Windows 10 x64, CPU Intel Core i7-2600 3.4 GHz, 8 GB RAM, GPU NVIDIA GTX 550 Ti). GPU поддерживает спецификацию  CUDA 2.1 и максимальное число потоков в блоке [https://ru.wikipedia.org/wiki/CUDA 1024]. Однако физически у нас есть всего 192 CUDA ядра(см [http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-550ti/specifications спецификации] видеокарты). Все потоки должны быть элементами двумерного квадратного блока. Поэтому исследования масштабируемости были проведены на 4, 16, 36, 64, 100, 144, 196, 256, 324, 400 потоках(на большем количестве потоков проводить исследования бессмысленно ввиду ухудшения производительности). Параметры компиляции: &lt;br /&gt;
&amp;lt;source&amp;gt;&amp;quot;nvcc.exe&amp;quot; -gencode=arch=compute_20,code=\&amp;quot;sm_20,compute_20\&amp;quot; --use-local-env --cl-version 2015 -ccbin &amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin&amp;quot;  -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot; -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot;  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler &amp;quot;/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd &amp;quot; -o Debug\kernel.cu.obj &amp;quot;kernel.cu&amp;quot; &amp;lt;/source&amp;gt;&lt;br /&gt;
Решение СЛАУ было реализовано в 2 этапа: &lt;br /&gt;
&lt;br /&gt;
1)Нахождение обратной матрицы с помощью метода Гаусса-Жордана. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void gaussjordan(float *A, float *I, int n, int i)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2)Умножение обратной матрицы на вектор правых частей. Для этого было написано ядро для CUDA:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c++&amp;quot;&amp;gt;__global__ void multiply_by_vec(float *mat, float *vec, float *out, const int N)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо сказать, что использование своих ядер для CUDA непременно ведет к снижению производительности. Для улучшения производительности предпочтительно использовать матричные операции из библиотеки cuBLAS. Однако, при таком подходе невозможно явно задать количество потоков - для конкретной видеокарты сама библиотека выбирает, какое количество потоков ей использовать. В связи с этим и были написаны свои ядра, позволяющие задавать количество потоков.&lt;br /&gt;
&lt;br /&gt;
Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. С нашей реализацией можно ознакомиться [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функций и их производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1000px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Как уже было сказано, из-за наличия только 192 физических процессоров, данный алгоритм показывает лучшее время работы при использовании 144 либо 256 потоков. 144 потока (размер блока 12х12) - наиболее близкое количество потоков к 192 физическим процессорам. Хорошее время работы на 256 потоках объясняется тем, что мы используем стандартный размер блока 16х16, а так же многие операции деления или умножения на количество потоков или размер блока в этом случае компилятор может заменить на операции побитового сдвига, которые работают быстрее обычных.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium&amp;diff=20452</id>
		<title>Обсуждение участника:Oleggium</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:Oleggium&amp;diff=20452"/>
		<updated>2016-12-08T22:12:35Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Статья [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]] ==&lt;br /&gt;
&lt;br /&gt;
=== Замечания ===&lt;br /&gt;
&lt;br /&gt;
* п.1.5 &amp;quot;result&amp;quot; лучше обозначить какой-нибудь латинской буквой как математическую величину [+]&lt;br /&gt;
* п.1.7 лучше заменить термин &amp;quot;надбавка&amp;quot; [+]&lt;br /&gt;
* п.1.7 граф выглядит достаточно элегантно, но показаны не все связи между этапами [?]&lt;br /&gt;
&#039;&#039;Между какими этапами необходимо указать связь? По нашему мнению все связи указаны&#039;&#039;&lt;br /&gt;
* п.1.9 конкретно указать также объемы входных и выходных данных [?]&lt;br /&gt;
&#039;&#039;В пункте конктерно указан ти и размер входных и выходных данных, что еще требуется указать?&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20451</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=20451"/>
		<updated>2016-12-08T22:09:48Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|VadimVV}}&lt;br /&gt;
{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;x = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;x = x + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton002.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован на библиотеке CUDA 8.0 для языка C++(компилятор nvcc) для Windows на домашнем компьютере(OS Windows 10 x64, CPU Intel Core i7-2600 3.4 GHz, 8 GB RAM, GPU NVIDIA GTX 550 Ti). Для данного GPU максимально возможное число потоков - 1024. В ходе оценки масштабируемости, программа была запущена в 16, 64, 256, 576, 1024 потока. Параметры компиляции: &lt;br /&gt;
&amp;lt;source&amp;gt;&amp;quot;nvcc.exe&amp;quot; -gencode=arch=compute_20,code=\&amp;quot;sm_20,compute_20\&amp;quot; --use-local-env --cl-version 2015 -ccbin &amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin&amp;quot;  -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot; -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot;  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler &amp;quot;/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd &amp;quot; -o Debug\kernel.cu.obj &amp;quot;kernel.cu&amp;quot; &amp;lt;/source&amp;gt;&lt;br /&gt;
Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. Решение СЛАУ было реализовано с помощью метода Гаусса-Жордана нахождения обратной матрицы. С примером реализации можно ознакомиться  [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функции и ее производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1000px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Видно, что для данной реализации алгоритма оптимальнее всего использовать 256 потоков.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=18577</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=18577"/>
		<updated>2016-11-20T13:06:29Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован на библиотеке CUDA 8.0 для языка C++(компилятор nvcc) для Windows на домашнем компьютере(OS Windows 10 x64, CPU Intel Core i7-2600 3.4 GHz, 8 GB RAM, GPU NVIDIA GTX 550 Ti). Для данного GPU максимально возможное число потоков - 1024. В ходе оценки масштабируемости, программа была запущена в 16, 64, 256, 576, 1024 потока. Параметры компиляции: &lt;br /&gt;
&amp;lt;source&amp;gt;&amp;quot;nvcc.exe&amp;quot; -gencode=arch=compute_20,code=\&amp;quot;sm_20,compute_20\&amp;quot; --use-local-env --cl-version 2015 -ccbin &amp;quot;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin&amp;quot;  -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot; -I&amp;quot;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include&amp;quot;  -G   --keep-dir Debug -maxrregcount=0  --machine 32 --compile -cudart static  -g   -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler &amp;quot;/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd &amp;quot; -o Debug\kernel.cu.obj &amp;quot;kernel.cu&amp;quot; &amp;lt;/source&amp;gt;&lt;br /&gt;
Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. Решение СЛАУ было реализовано с помощью метода Гаусса-Жордана нахождения обратной матрицы. С примером реализации можно ознакомиться  [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функции и ее производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1000px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Видно, что для данной реализации алгоритма оптимальнее всего использовать 256 потоков.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=17516</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=17516"/>
		<updated>2016-11-16T02:32:07Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Масштабируемость алгоритма и его реализации */&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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован на библиотеке CUDA 8.0 для языка C++ на домашнем компьютере. В данной конфигурации максимально возможное число потоков - 1024. Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. Решение СЛАУ было реализовано с помощью метода Гаусса-Жордана нахождения обратной матрицы. С примером реализации можно ознакомиться  [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функции и ее производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1000px|Рис.2 Время решения СЛАУ в зависимости от размерности системы и количества потоков|мини|центр]]&lt;br /&gt;
Видно, что для данной реализации алгоритма оптимальнее всего использовать 256 потоков.&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=17515</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=17515"/>
		<updated>2016-11-16T02:27:35Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]] &lt;br /&gt;
(все пункты выполнялись совместно).&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно);&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданных функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Для исследования масштабируемости алгоритм был реализован на библиотеке CUDA 8.0 для языка C++ на домашнем компьютере. В данной конфигурации максимально возможное число потоков - 1024. Считалось, что на вход алгоритму были заданы нелинейные функции и их производные. Решение СЛАУ было реализовано с помощью метода Гаусса-Жордана нахождения обратной матрицы. С примером реализации можно ознакомиться  [https://dl.dropboxusercontent.com/u/43317547/ParallelingCuda.zip здесь].&lt;br /&gt;
&lt;br /&gt;
Говоря о масштабируемости данного алгоритма, важно отметить следующее: &lt;br /&gt;
&lt;br /&gt;
1. Время вычисления набора функций и набора их производных очень сильно зависит от их сложности и не связано с мощностью алгоритма. &lt;br /&gt;
&lt;br /&gt;
2. Скорость отработки алгоритма от начала до конца может не быть связана с его мощностью: заранее неизвестно начальное приближение, а значит и количество итераций, за которое он сойдется. &lt;br /&gt;
&lt;br /&gt;
Вывод: для оценки масштабируемости необходимо сравнивать одну итерацию алгоритма, и притом, без учета времени вычисления значения функции и ее производных. В итоге, приходим к выводу, что целесообразно измерить время выполнения одного решения СЛАУ. Также стоит отметить, что в нашей реализации при хорошем выборе начального приближения алгоритм сходился за 10-20 итераций.&lt;br /&gt;
&lt;br /&gt;
Можно рассмотреть зависимость масштабируемости от одного из двух критериев: размерности задачи или же количества потоков. На графике ниже представлена зависимость времени решения СЛАУ от количества потоков и размерности матрицы&lt;br /&gt;
[[Файл:Newton_plot.png|1000px|Рис.2 Время решения СЛАУ в реализации алгоритма с помошщью библиотеки CUDA.|мини|центр]]&lt;br /&gt;
Видно, что для данной реализации алгоритма оптимальнее всего использовать 256 потоков. &lt;br /&gt;
&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
* [http://dumpz.org/13923/ C++]&lt;br /&gt;
* [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
* [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
* [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14888</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14888"/>
		<updated>2016-10-30T17:08:13Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Ресурс параллелизма алгоритма */&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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданнывх функций, а так же в предположении, что производные этих функций не даны:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14887</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14887"/>
		<updated>2016-10-30T17:08:03Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Ресурс параллелизма алгоритма */&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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, вычислим параллельную сложность алгоритма без учета внутреннего вида заданнывх функций, а так же в предположении, что производные этих функций не даны.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14883</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14883"/>
		<updated>2016-10-30T17:06:52Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, тогда:&lt;br /&gt;
&lt;br /&gt;
Вычислим параллельную сложность без учета внутреннего вида функций, а так же в предположении, что производные не даны.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium&amp;diff=14882</id>
		<title>Обсуждение участника:Oleggium</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:Oleggium&amp;diff=14882"/>
		<updated>2016-10-30T17:05:06Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Статья [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]] ==&lt;br /&gt;
&lt;br /&gt;
=== Замечания === &lt;br /&gt;
* Нет названий многих пунктов из раздела 2 (также 2.4 и 2.7 неправильно нумерованы, но это исправится при внесении всех пунктов). [+] &lt;br /&gt;
* П. 1.5 - псевдокод нужно оформить как исходный код. [Поясните, что это значит? Оформить псевдокод с помощью тегов source? В таком случае не будет возможности использовать математические формулы(с тегами math)] &lt;br /&gt;
* П. 1.6, 2.2 - списки не стоит оформлять отдельными блоками [+] &lt;br /&gt;
* П. 1.8 - отсутствует явная оценка параллельной сложности алгоритма. [+]&lt;br /&gt;
* П. 1.10 - отсутствует оценка вычислительной мощности. [+] &lt;br /&gt;
* П. 1.10 - стоит поправить ссылки (написать &amp;quot;в разделах...&amp;quot; и убрать # из названий ссылок). [+] &lt;br /&gt;
* Не указан вклад каждого автора. [Заранее не было озвучено то, что если мы пишем группой, то нужно разделять пункты. Поэтому, мы, как и всегда делали при нашей групповой работе, делали все вместе без разделения пунктов. Мы либо консультировали друг друга по скайпу, либо правили вдвоем каждый пункт. Сейчас мы могли бы искусственно разделить наше описание, но действительности это отражать не будет]&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium&amp;diff=14879</id>
		<title>Обсуждение участника:Oleggium</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:Oleggium&amp;diff=14879"/>
		<updated>2016-10-30T17:04:25Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Замечания */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Статья [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]] ==&lt;br /&gt;
&lt;br /&gt;
=== Замечания === &lt;br /&gt;
* Нет названий многих пунктов из раздела 2 (также 2.4 и 2.7 неправильно нумерованы, но это исправится при внесении всех пунктов). [+] &lt;br /&gt;
* П. 1.5 - псевдокод нужно оформить как исходный код. [Поясните, что это значит? Оформить псевдокод с помощью тегов &amp;lt;source&amp;gt;? В таком случае не будет возможности использовать формулы &amp;lt;math&amp;gt;] &lt;br /&gt;
* П. 1.6, 2.2 - списки не стоит оформлять отдельными блоками. [+] &lt;br /&gt;
* П. 1.8 - отсутствует явная оценка параллельной сложности алгоритма. [+]&lt;br /&gt;
* П. 1.10 - отсутствует оценка вычислительной мощности. [+] &lt;br /&gt;
* П. 1.10 - стоит поправить ссылки (написать &amp;quot;в разделах...&amp;quot; и убрать # из названий ссылок). [+] &lt;br /&gt;
* Не указан вклад каждого автора. [Заранее не было озвучено то, что если мы пишем группой, то нужно разделять пункты. Поэтому, мы, как и всегда делали при нашей групповой работе, делали все вместе без разделения пунктов. Мы либо консультировали друг друга по скайпу, либо правили вдвоем каждый пункт. Сейчас мы могли бы искусственно разделить наше описание, но действительности это отражать не будет]&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14876</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14876"/>
		<updated>2016-10-30T17:02:05Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ. Пусть &amp;lt;math&amp;gt;p&amp;lt;n&amp;lt;/math&amp;gt; - количество потоков, тогда:&lt;br /&gt;
&lt;br /&gt;
Вычислим параллельную сложность без учета внутреннего вида функций, а так же в предположении, что производные не даны.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Получили сложность &amp;lt;math&amp;gt;O(5n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования одной из параллельной&amp;lt;ref name=&amp;quot;LINK5&amp;quot;&amp;gt;http://www.intuit.ru/studies/courses/4447/983/lecture/14931&amp;lt;/ref&amp;gt; реализации метода Гаусса сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого получили сложность &amp;lt;math&amp;gt;O(n^3/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются и функции, и данные, причем функции произвольного вида)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера можно ознакомиться со следующими реализациями метода Ньютона:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14867</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14867"/>
		<updated>2016-10-30T16:50:53Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
Вычислительную мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных, в общем случае посчитать для данного алгоритма невозможно(ввиду того, что на вход алгоритму подаются произвольные функции)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера готовой реализации метода Ньютона, можно ознакомиться с одной из следующих библиотек:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14852</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14852"/>
		<updated>2016-10-30T16:33:47Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма|Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера готовой реализации метода Ньютона, можно ознакомиться с одной из следующих библиотек:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14851</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=14851"/>
		<updated>2016-10-30T16:32:54Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(k \cdot n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;math&amp;gt;rezult = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;k = 0&amp;lt;/math&amp;gt; - номер итерации.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;result = result + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;gt; \varepsilon&amp;lt;/math&amp;gt; &#039;&#039;&#039;AND&#039;&#039;&#039; &amp;lt;math&amp;gt;k &amp;lt; k_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; - численное решение заданной нелинейной системы.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций (то есть получили конечное решение, причем алгоритм сошелся к решению и была достигнута заданная точность). Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt; (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\bullet&amp;lt;/math&amp;gt; Вычисляем &amp;lt;math&amp;gt;F(x^k)&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;\bullet&amp;lt;/math&amp;gt; Решаем СЛАУ &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(k \cdot 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;
[[Файл:Graph_newton.png|500px|Рис.1 Информационный граф алгоритма.|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способа решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В разделах [[#Математическое описание алгоритма|Математическом описании алгоритма]] и [[#Последовательная сложность алгоритма|Последовательной сложности алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&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_k&amp;lt;/math&amp;gt;, необходимо знать предыдущее, то эффективность и скорость алгоритма будут очень сильно зависеть от алгоритма, которым решается СЛАУ. Для решения СЛАУ существует огромное количество готовых библиотек для различных языков программирования. Их можно легко найти в интернете.&lt;br /&gt;
&lt;br /&gt;
В качестве примера готовой реализации метода Ньютона, можно ознакомиться с одной из следующих библиотек:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://dumpz.org/13923/ C++]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\cdot &amp;lt;/math&amp;gt; [https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9395</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9395"/>
		<updated>2016-10-15T12:09:31Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона &amp;lt;ref name=&amp;quot;LINK_WIKI&amp;quot;&amp;gt;https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0&amp;lt;/ref&amp;gt; (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;LINK2&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK3&amp;quot;&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt;&amp;lt;ref name=&amp;quot;LINK4&amp;quot;&amp;gt;Бахвалов Н. С., Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В [[#Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. &lt;br /&gt;
&lt;br /&gt;
Реализации самого метода Ньютона:&lt;br /&gt;
*[http://dumpz.org/13923/ C++]&lt;br /&gt;
*[https://www.math.ohiou.edu/courses/math3600/lecture13.pdf MATLAB]&lt;br /&gt;
*[http://six.cheng.cam.ac.uk/wiki/images/8/8b/NumMeth_Handout_5.pdf MATLAB]&lt;br /&gt;
*[https://v8doc.sas.com/sashtml/iml/chap8/sect4.htm SAS]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9354</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9354"/>
		<updated>2016-10-15T11:55:19Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В [[#Математическое описание алгоритма]] и [[#Последовательная сложность алгоритма]] представлены некоторые теоремы и утверждения, показывающие эти свойства.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9350</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9350"/>
		<updated>2016-10-15T11:54:19Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В математическом описании алгоритма представлены некоторые теоремы и утверждения, показывающие эти свойства.[[#Математическое описание алгоритма]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9338</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9338"/>
		<updated>2016-10-15T11:50:50Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В математическом описании алгоритма представлены некоторые теоремы и утверждения, показывающие эти свойства.[[#См. также]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9332</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9332"/>
		<updated>2016-10-15T11:49:02Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных), &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В математическом описании алгоритма представлены некоторые теоремы и утверждения, показывающие эти свойства.[[#См. также]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9330</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9330"/>
		<updated>2016-10-15T11:48:26Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных) + &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было описано в вычислительном ядре, данный алгоритм использует 2 основных метода - решение СЛАУ и вычисление Якобиана.&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;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;
[[Файл:Graph_newton.jpg|500px|Рис.1 Информационный граф алгоритма. Блок IN представляет из себя входной вектор начальных приближений X_0, F(x_k) - вычисление значений нелинейных функций, J(x_k) - Вычисление Якобиана(либо вызов уже задананных функций с производными). На выходе каждой итерации получаем новый вектор x_k|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма возможно использовать параллельное вычисление значений Якобиана(т.к. вычисление каждого значения в матрице не зависит от других), а так же параллельное решение СЛАУ.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; &amp;lt;math&amp;gt;F(x)&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^2&amp;lt;/math&amp;gt; производных) + &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерный вектор &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; - начальное приближение, &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Скорость сходимости алгоритма очень сильно зависит от вида заданных нелинейных функций, от выбора способра решения СЛАУ, а так же от выбора начального приближения. При некорректном выборе начального приближения сходимости вообще может не быть. В математическом описании алгоритма представлены некоторые теоремы и утверждения, показывающие эти свойства.[[#См. также]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9068</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=9068"/>
		<updated>2016-10-15T10:36:39Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций, причем &amp;lt;math&amp;gt;k &amp;lt;&amp;lt; n^3&amp;lt;/math&amp;gt;. Количество итераций &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В итоге получили сложность &amp;lt;math&amp;gt;O(n^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Graph.jpg]]&lt;br /&gt;
&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6828</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6828"/>
		<updated>2016-10-13T19:46:43Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; итераций. Количество итераций зависит от выбора начального приближения.&lt;br /&gt;
&lt;br /&gt;
Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;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;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6813</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6813"/>
		<updated>2016-10-13T19:40:58Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru/ru/structure/depts/is/course2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; итераций. Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;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;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6710</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6710"/>
		<updated>2016-10-13T18:17:20Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru%2Fru%2Fstructure%2Fdepts%2Fis%2Fcourse2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; итераций. Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;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;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6709</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6709"/>
		<updated>2016-10-13T18:16:59Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Последовательная сложность алгоритма */&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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru%2Fru%2Fstructure%2Fdepts%2Fis%2Fcourse2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, сделанные в самом алгоритме. Однако, так же необходимо помнить о том, что внутри каждого вызова каждой из заданных нелинейных функций возможно выполнение большого количество арифметических операций. Не зная конкретный вид этих функций, получить оценку арифметических операций внутри функций невозможно. Очевидно, что при сложных нелинейных функциях, суммарное количество операций внутри функций и вне их, требующихся для вычисления Якобиана, может быть существенно больше сложности решения СЛАУ. В этом случае целесообразно использовать модифицированный метод Ньютона, о котором говорилось ранее.&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; итераций. Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;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;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6705</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6705"/>
		<updated>2016-10-13T18:01:59Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Одномерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru%2Fru%2Fstructure%2Fdepts%2Fis%2Fcourse2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
В оценке сложности будем учитывать только арифметические операции, однако, так же необходимо не забывать об оценке для количества вызовов функций.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Будем считать, что в цикле &#039;&#039;&#039;DO ... WHILE&#039;&#039;&#039; мы сделали &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; итераций. Каждая итерация состоит из следующего:&lt;br /&gt;
*Вычисление производных &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; в случае, если они не заданы. Для каждого дифференцирования используя, например, формулу центральной разностной производной &amp;lt;math&amp;gt;f&#039;(x) = (f(x+h) - f(x-h))/2h &amp;lt;/math&amp;gt; необходимо 2 вызова функций, 3 сложения, одно умножение и одно деление. Количество арифметических операций - &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt;. Всего в матрице &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; элементов. Получили сложность &amp;lt;math&amp;gt;O(5n^2)&amp;lt;/math&amp;gt;                                           (если производные заданы, то необходимо сделать &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; вызовов функций)&lt;br /&gt;
*Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt; -  &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вызовов функций&lt;br /&gt;
*Решаем СЛАУ&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt; - В случае использования метода Гаусса &amp;lt;math&amp;gt;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;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6644</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6644"/>
		<updated>2016-10-13T17:21:12Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt; в случае решения СЛАУ методом Гаусса&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;F(x)&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;x^0&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&amp;lt;ref name=&amp;quot;VOLA&amp;quot;&amp;gt;http://www.apmath.spbu.ru%2Fru%2Fstructure%2Fdepts%2Fis%2Fcourse2task4_1.pdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&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} &amp;lt;/math&amp;gt;&lt;br /&gt;
* Решение СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -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;
&lt;br /&gt;
Входные данные:&amp;lt;math&amp;gt;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;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 = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;DO&#039;&#039;&#039;&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
:Вычисляем &amp;lt;math&amp;gt;F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;x^{k} = x^k + \Delta x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;WHILE&#039;&#039;&#039; &amp;lt;math&amp;gt;||\Delta x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
&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;F(x)&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;x^0&amp;lt;/math&amp;gt; - начальное приближение.&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; - точность&lt;br /&gt;
&lt;br /&gt;
Выходные данные: численное решение &amp;lt;math&amp;gt;x^k&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже было сказано, основная часть данного алгоритма составляет решение СЛАУ. Поэтому, целесообразно не искать уже реализованный алгоритм, а взять некоторую библиотеку, быстро рещающую СЛАУ(параллельно или последовательно), и все остальные шаги алгоритма реализовать самому(ведь их не очень много). Имеется огромное количество библиотек на любых языках программирования, решающих СЛАУ. Одна из возможных реализаций алгоритма доступна [http://dumpz.org/13923/ здесь]&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;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6601</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6601"/>
		<updated>2016-10-13T16:34:01Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = n n-мерных функций (так же дополнительно могут быть даны производные) + n-мерный вектор - начальное приближение&lt;br /&gt;
| output_data       = n-мерный вектор&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Входные данные:F(x) -  n n-мерных функций;  n-мерный вектор x^0 - начальное приближение.&lt;br /&gt;
eps - точность&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x^k = x^0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пока |x^k+1-x^k| &amp;gt; eps:&lt;br /&gt;
    Вычисляем &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} &amp;lt;/math&amp;gt; (если производные не даны, то их можно вычислить численно)&lt;br /&gt;
    Решаем СЛАУ(например, методом Гаусса) &amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;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;x^k+1&amp;lt;/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;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6594</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6594"/>
		<updated>2016-10-13T16:23:55Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n n-мерных функций (так же дополнительно могут быть даны производные) + 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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6554</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6554"/>
		<updated>2016-10-13T15:37:45Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;2n+1&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,     F(x),  x \in \mathbb{R}^{n},  (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&amp;lt;/math&amp;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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). &lt;br /&gt;
&lt;br /&gt;
Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: x = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6526</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=6526"/>
		<updated>2016-10-13T14:58:44Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;2n+1&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;
Авторы: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt; вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Рассмотрим систему нелинейных уравнений&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F(x) = 0,  F(x),  x \in \mathbb{R}^{n}, (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и предположим, что существует вектор &amp;lt;math&amp;gt;\bar{x} \in D \subset \mathbb{R}^{n}&amp;lt;/math&amp;gt;, являющийся решением системы (1). &lt;br /&gt;
&lt;br /&gt;
Будем считать, что &amp;lt;math&amp;gt;F(x) = (f_1(x), f_2(x), ... f_n(x))^T&amp;lt;/math&amp;gt;, причем &amp;lt;math&amp;gt;f_i(\cdot) \in C^1(D) \forall i&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;\bar{x}: F(x) = F(x^0) + F&#039;(x^0)(x-x^0) + o(||x-x^0||)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Здесь&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
F&#039;(x) = \frac{\partial{F(x)}}{\partial{x}} = &lt;br /&gt;
\begin{pmatrix} &lt;br /&gt;
\frac{\partial{f_1(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_1(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_1(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\frac{\partial{f_2(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_2(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_2(x_n)}}{\partial{x_n}}\\&lt;br /&gt;
\vdots &amp;amp; \vdots &amp;amp; \ddots &amp;amp; \vdots\\&lt;br /&gt;
\frac{\partial{f_n(x_1)}}{\partial{x_1}} &amp;amp; \frac{\partial{f_n(x_2)}}{\partial{x_2}} &amp;amp; \cdots &amp;amp; \frac{\partial{f_n(x_n)}}{\partial{x_n}}&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
называется матрицей Якоби, а её определитель – якобианом системы (1). Исходное уравнение заменим следующим: &amp;lt;math&amp;gt;F(x^0) + F&#039;(x^0)(x-x^0) = 0&amp;lt;/math&amp;gt;. Считая матрицу Якоби &amp;lt;math&amp;gt;F&#039;(x^0)&amp;lt;/math&amp;gt; неособой, разрешим это уравнение относительно &amp;lt;math&amp;gt;x: \hat{x} = x^0 - [F&#039;(x)]^{-1}F(x^0)&amp;lt;/math&amp;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)&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^{k}&amp;lt;/math&amp;gt; к решению системы со скоростью геометрической прогрессии при условии, что начальное приближение &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; выбрано из достаточно малой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&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;||x^{k+1}-\bar{x}|| \le \omega||x^{k}-\bar{x}||^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сформулируем теорему.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Теорема.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть в некоторой окрестности решения &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; системы (1) функции &amp;lt;math&amp;gt;f_i(\cdot) \in C^2&amp;lt;/math&amp;gt; и якобиан системы отличен от нуля в этой окрестности. Тогда существует &amp;lt;math&amp;gt;\delta&amp;lt;/math&amp;gt;-окрестность точки &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt; такая, что при любом выборе начального приближения &amp;lt;math&amp;gt;x^0&amp;lt;/math&amp;gt; из этой окрестности последовательность &amp;lt;math&amp;gt;{x_k}&amp;lt;/math&amp;gt; не выходит из неё и имеет место квадратичная сходимость этой последовательности.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 1.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;В качестве критерия окончания процесса итераций обычно берут условие: &amp;lt;math&amp;gt;||x^{k+1}-x^k|| &amp;lt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 2.&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Сложность метода Ньютона – в обращении матрицы Якоби. Вводя обозначение &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; СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^k)}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;откуда и находим искомую поправку &amp;lt;math&amp;gt;\Delta x^k&amp;lt;/math&amp;gt;, а затем и следующее приближение &amp;lt;math&amp;gt;x^{k+1} = x^k + \Delta x&amp;lt;/math&amp;gt; к решению &amp;lt;math&amp;gt;\bar{x}&amp;lt;/math&amp;gt;. Очевидно, что это значительно сокращает количество арифметических операций для построения очередного приближения.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 3.&#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;Начиная с некоторого шага &amp;lt;math&amp;gt;k_0&amp;lt;/math&amp;gt; решают стационарную СЛАУ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{\partial F(x^{k_0})}{\partial x} \cdot \Delta x^k = -F(x^k)&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Данное видоизменение носит название модифицированный метод Ньютона.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Замечание 4. (О выборе начального приближения).&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Пусть вектор-функция &amp;lt;math&amp;gt;\Phi(\lambda, x)&amp;lt;/math&amp;gt; такова, что &amp;lt;math&amp;gt;\Phi(1, x) = F(x)&amp;lt;/math&amp;gt;, а система &amp;lt;math&amp;gt;\Phi(0, x) = 0&amp;lt;/math&amp;gt; может быть решена. Тогда разбивая &amp;lt;math&amp;gt;[0,1]&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;\Phi(i/N, x) = F(x), i = 1,... N&amp;lt;/math&amp;gt;, принимая для каждой следующей системы в качестве начального приближения решение предыдущей системы.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Lineprinter&amp;diff=5553</id>
		<title>Обсуждение участника:Lineprinter</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:Lineprinter&amp;diff=5553"/>
		<updated>2016-10-11T22:59:02Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: /* Перенос */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
&lt;br /&gt;
Статья: algowiki-project.org/ru/Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка;&lt;br /&gt;
Выполняют: Алимов Дамир и Антон Лесничий&lt;br /&gt;
&lt;br /&gt;
Статья: Алгоритм кластеризации, основанный на минимальном остовном дереве;&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;/div&gt;</summary>
		<author><name>Dimx19</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=5527</id>
		<title>Участник:Oleggium/Метод Ньютона для решения систем нелинейных уравнений(2)</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:Oleggium/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0_%D0%B4%D0%BB%D1%8F_%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(2)&amp;diff=5527"/>
		<updated>2016-10-11T21:41:14Z</updated>

		<summary type="html">&lt;p&gt;Dimx19: &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(n^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;2n+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы: [[Участник:Гирняк_Олег|Гирняк О.Р.]], [[Участник:Васильков_Дмитрий|Васильков Д.А.]]&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Метод Ньютона для решение систем нелинейных уравнений&#039;&#039;&#039; - обобщение классического метода Ньютона (метода касательных) нахождения корня (нуля) заданной функции. Однормерный метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. &lt;br /&gt;
&lt;br /&gt;
Впервые метод был опубликован в трактате «Алгебра» Джона Валлиса в 1685 году, по просьбе которого он был кратко описан самим Ньютоном. В 1690 году Джозеф Рафсон опубликовал упрощённое описание в работе «Общий анализ уравнений» (лат. «Analysis aequationum universalis»). Рафсон рассматривал метод Ньютона как чисто алгебраический и ограничил его применение полиномами, однако при этом он описал метод на основе последовательных приближений {\displaystyle x_{n}} x_{n} вместо более трудной для понимания последовательности полиномов, использованной Ньютоном. Наконец, в 1740 году метод Ньютона был описан Томасом Симпсоном как итеративный метод первого порядка решения нелинейных уравнений с использованием производной в том виде, в котором он излагается здесь. В той же публикации Симпсон обобщил метод на случай системы из двух уравнений и отметил, что метод Ньютона также может быть применён для решения задач оптимизации путём нахождения нуля производной или градиента.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Dimx19</name></author>
	</entry>
</feed>