<?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=N+Zakharov</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=N+Zakharov"/>
	<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/N_Zakharov"/>
	<updated>2026-10-22T20:01:56Z</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:N_Zakharov/%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&amp;diff=18730</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=18730"/>
		<updated>2016-11-21T10:30:50Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\frac{r_0}{\|r_0\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\|\omega_m\|&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ. &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;nk&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(kn)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях Арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(\frac{k^2n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода Гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;[http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
&lt;br /&gt;
Версия MPI - impi/4.1.0&lt;br /&gt;
&lt;br /&gt;
Реализация BLAS - mkl/11.2.0&lt;br /&gt;
&lt;br /&gt;
Запуски проводились на regulal4&lt;br /&gt;
&lt;br /&gt;
Модель используемого CPU - Intel Xeon X5570 2.93GHz&lt;br /&gt;
&lt;br /&gt;
Версия PETSc - 3.7.4&lt;br /&gt;
&lt;br /&gt;
Флаги компиляции: -fPIC -Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -fvisibility=hidden -g3&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахождения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
Набор начальных параметров:&lt;br /&gt;
&lt;br /&gt;
*    Число процессоров [1 2 4 8 16 32 48 64 80 96 112 128];&lt;br /&gt;
*    Порядок матрицы [82 122 162 202 242].&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
Как видно из приведенных графиков, эффективность распараллеливания алгоритма довольно быстро убывает при увеличении числа процессоров.&lt;br /&gt;
&lt;br /&gt;
При фиксированном числе процессоров наблюдается рост ускорения при увеличении вычислительной сложности задачи&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=18114</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=18114"/>
		<updated>2016-11-18T11:37:42Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\frac{r_0}{\|r_0\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\|\omega_m\|&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ. &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;nk&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(kn)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях Арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(\frac{k^2n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода Гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;[http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
&lt;br /&gt;
Версия MPI - impi/4.1.0&lt;br /&gt;
&lt;br /&gt;
Реализация BLAS - mkl/11.2.0&lt;br /&gt;
&lt;br /&gt;
Запуски проводились на regulal4&lt;br /&gt;
&lt;br /&gt;
Модель используемого CPU - Intel Xeon X5570 2.93GHz&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахождения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
Набор начальных параметров:&lt;br /&gt;
&lt;br /&gt;
*    Число процессоров [1 2 4 8 16 32 48 64 80 96 112 128];&lt;br /&gt;
*    Порядок матрицы [82 122 162 202 242].&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
Как видно из приведенных графиков, эффективность распараллеливания алгоритма довольно быстро убывает при увеличении числа процессоров.&lt;br /&gt;
&lt;br /&gt;
При фиксированном числе процессоров наблюдается рост ускорения при увеличении вычислительной сложности задачи&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=18112</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=18112"/>
		<updated>2016-11-18T11:35:16Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;\frac{r_0}{\|r_0\|}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\|\omega_m\|&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ. &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;nk&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(kn)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(kn^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях Арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(\frac{k^2n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода Гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(\frac{kn}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(\frac{n^2}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(\frac{n}{p})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(\frac{kn^2}{p})&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;[http://parallel.ru/cluster Суперкомпьютерного комплекса Московского университета].&lt;br /&gt;
&lt;br /&gt;
Версия MPI - impi/4.1.0&lt;br /&gt;
&lt;br /&gt;
Реализация BLAS - mkl/11.2.0&lt;br /&gt;
&lt;br /&gt;
Модель используемого CPU - Intel Xeon X5570 2.93GHz&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахождения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
Набор начальных параметров:&lt;br /&gt;
&lt;br /&gt;
*    Число процессоров [1 2 4 8 16 32 48 64 80 96 112 128];&lt;br /&gt;
*    Порядок матрицы [82 122 162 202 242].&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
Как видно из приведенных графиков, эффективность распараллеливания алгоритма довольно быстро убывает при увеличении числа процессоров.&lt;br /&gt;
&lt;br /&gt;
При фиксированном числе процессоров наблюдается рост ускорения при увеличении вычислительной сложности задачи&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17994</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17994"/>
		<updated>2016-11-17T19:05:48Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахожения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
Набор начальных параметров:&lt;br /&gt;
&lt;br /&gt;
*    Число процессоров [1 2 4 8 16 32 48 64 80 96 112 128];&lt;br /&gt;
*    Порядок матрицы [82 122 162 202 242].&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
Как видно из приведенных графиков, эффективность распараллеливания алгоритма довольно быстро убывает при увеличении числа процессоров.&lt;br /&gt;
&lt;br /&gt;
При фиксированном числе процессоров наблюдается рост ускорения при увеличении вычислительной сложности задачи&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17991</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17991"/>
		<updated>2016-11-17T18:44:30Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахожения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
Набор начальных параметров:&lt;br /&gt;
&lt;br /&gt;
*    Число процессоров [1 2 4 8 16 32 48 64 80 96 112 128];&lt;br /&gt;
*    Порядок матрицы [82 122 162 202 242].&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17990</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17990"/>
		<updated>2016-11-17T18:40:26Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахожения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2. Изменение ускорения в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3. Изменение эффективности в зависимости от числа процессоров и размера матрицы]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17987</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17987"/>
		<updated>2016-11-17T18:34:10Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&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;ref&amp;gt;http://www.mcs.anl.gov/petsc/petsc-3.5/src/snes/examples/tutorials/ex30.c.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахожения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17984</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17984"/>
		<updated>2016-11-17T18:23:09Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве модельной задачи рассмотрим один из примеров, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для нахожения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17980</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17980"/>
		<updated>2016-11-17T18:12:19Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве модельной задачи рассмотрим один из примеров, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для наможения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:NewtonFlops.jpg|thumb|center|700px|Рисунок 1]]&lt;br /&gt;
[[Файл:NewtonAcc.jpg|thumb|center|700px|Рисунок 2]]&lt;br /&gt;
[[Файл:NewtonEff.jpg|thumb|center|700px|Рисунок 3]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17959</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17959"/>
		<updated>2016-11-17T17:14:01Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве модельной задачи рассмотрим один из примеров, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для наможения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:newton_Flops.png|thumb|center|700px|Рисунок 1]]&lt;br /&gt;
[[Файл:newton_Time.png|thumb|center|700px|Рисунок 2]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17956</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17956"/>
		<updated>2016-11-17T17:03:38Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве модельной задачи рассмотрим один из примеров, поставляемых вместе с модулем SNES пакета PETSc.&lt;br /&gt;
&lt;br /&gt;
Тестирование алгоритма проводилось на суперкомпьютере Ломоносов.&lt;br /&gt;
&lt;br /&gt;
Кроме того, использовались следующие параметры:&lt;br /&gt;
&lt;br /&gt;
1) Pестарт алгоритма GMRES через 300 итераций&lt;br /&gt;
&lt;br /&gt;
2) Максимальное число итераций для наможения решения СЛАУ - 1500&lt;br /&gt;
&lt;br /&gt;
3) Максимальное число итераций метода Ньютона на данном этапе решения - 20&lt;br /&gt;
&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17952</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17952"/>
		<updated>2016-11-17T16:25:40Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
На оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, при небольших значениях параметра &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; получим суммарную оценку &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;.&lt;br /&gt;
Выполнение данного ограничения можно достичь следующими способами:&lt;br /&gt;
&lt;br /&gt;
1) Увеличение скорости сходимости решения СЛАУ при использовании предобуславливания&lt;br /&gt;
&lt;br /&gt;
2) Используя модификацию данного алгоритма - GMRES(m)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17945</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17945"/>
		<updated>2016-11-17T16:08:58Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; операций умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;k^2&amp;lt;/math&amp;gt; операций расчета нормы, умножения вектора на число, сложения векторов - &amp;lt;math&amp;gt;O(k^2*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   QR-факторизация матрицы - &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(k*n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
Оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление вектор-функции F в точке - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - &amp;lt;math&amp;gt;O(n^2/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
   Расчет нормы - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17943</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17943"/>
		<updated>2016-11-17T16:05:53Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt;&lt;br /&gt;
Предположим, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда сложность расчета вектор-функции будет &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;, матрицы якобиана - &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет O(1).&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   k операций умножения матрицы на вектор - O(k*n^2/p)&lt;br /&gt;
   k^2 операций расчета нормы, умножения вектора на число, сложения векторов - O(k^2*n/p)&lt;br /&gt;
   QR-факторизация матрицы - O(k^2)&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - O(k^2)&lt;br /&gt;
   Умножение матрицы на вектор - O(k*n/p)&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
Оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
   Вычисление вектор-функции F в точке - O(n/p)&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - O(n^2/p)&lt;br /&gt;
   Расчет нормы - O(n/p)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17941</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17941"/>
		<updated>2016-11-17T16:00:38Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^3)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет O(1).&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   k операций умножения матрицы на вектор - O(k*n^2/p)&lt;br /&gt;
   k^2 операций расчета нормы, умножения вектора на число, сложения векторов - O(k^2*n/p)&lt;br /&gt;
   QR-факторизация матрицы - O(k^2)&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - O(k^2)&lt;br /&gt;
   Умножение матрицы на вектор - O(k*n/p)&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
Оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
   Вычисление вектор-функции F в точке - O(n/p)&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - O(n^2/p)&lt;br /&gt;
   Расчет нормы - O(n/p)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17940</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17940"/>
		<updated>2016-11-17T15:58:22Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. Будем предполагать, что доступно p процессоров.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как и ранее будем предполагать, что сложность расчета одного элемента вектор-функции F и матрицы якобиана J будет O(1).&lt;br /&gt;
&lt;br /&gt;
При получении оценки последовательной сложности алгоритма было показано, что для одной итерации метода Ньютона необходимо выполнить:&lt;br /&gt;
&lt;br /&gt;
На итерациях арнольди:&lt;br /&gt;
   k операций умножения матрицы на вектор - O(k*n^2/p)&lt;br /&gt;
   k^2 операций расчета нормы, умножения вектора на число, сложения векторов - O(k^2*n/p)&lt;br /&gt;
   QR-факторизация матрицы - O(k^2)&lt;br /&gt;
На решении задачи минимизации:&lt;br /&gt;
   Обратный ход метода гаусса - O(k^2)&lt;br /&gt;
   Умножение матрицы на вектор - O(k*n/p)&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
Оставшиеся операции одной итерации метода Ньютона:&lt;br /&gt;
   Сложение векторов - O(n/p)&lt;br /&gt;
   Вычисление вектор-функции F в точке - O(n/p)&lt;br /&gt;
   Вычисление матрицы якобиана J в точке - O(n^2/p)&lt;br /&gt;
   Расчет нормы - O(n/p)&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17938</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17938"/>
		<updated>2016-11-17T15:28:48Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k^2*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. При использовании P процессоров мы получим:&amp;lt;br&amp;gt;&lt;br /&gt;
Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(n^2/P)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Скалярное произведение, сложение векторов, умножение вектора на число - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17481</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17481"/>
		<updated>2016-11-15T21:14:09Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 1. Информационный граф]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Вообще говоря, метод Ньютона является последовательным методом, но на определенных шагах, таких как решение СЛАУ, приближенное вычисление Якобиана, можно применить идеи параллельных вычислений.&lt;br /&gt;
&lt;br /&gt;
Основным ресурсом параллелизма в представленном алгоритме являются: умножение матрицы на вектор, скалярное произведение и элементарные операции над векторами.&lt;br /&gt;
&lt;br /&gt;
Пусть нам будет дана матрица порядка &#039;&#039;n&#039;&#039;. При использовании P процессоров мы получим:&amp;lt;br&amp;gt;&lt;br /&gt;
Умножение матрицы на вектор - &amp;lt;math&amp;gt;O(n^2/P)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Скалярное произведение, сложение векторов, умножение вектора на число - &amp;lt;math&amp;gt;O(n/p)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=17473</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=17473"/>
		<updated>2016-11-15T21:03:08Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[Участник:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]. Вклад во все разделы равнозначный.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основная сложность на каждой итерации заключается в решении системы уравнений. Один из самых эффективных методов их решения базируется на идеях Крылова, а именно проекционных итерационных методах. &lt;br /&gt;
Они основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;source&amp;gt;&lt;br /&gt;
 Выбор начального приближения x_k&lt;br /&gt;
 Вычисление вектора F(x_k)&lt;br /&gt;
 WHILE (условие остановки не выполнено)&lt;br /&gt;
   Вычисление якобиана J(x_k) = F&#039;(x_k)&lt;br /&gt;
   Решение линейной системы уравнений алгоритмом GMRES J(x_k)s_k = -F(x_k)&lt;br /&gt;
   x_k = x_k + s_k&lt;br /&gt;
   Вычисление вектора F(x_k)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Grafnewton.PNG|thumb|600px|center| Рис. 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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Так как во входных данных присутствует не только начальное приближение, но и функции, о свойствах которых, вообще говоря, ничего не известно, оценивать эффективность алгоритма сложно. Из классических результатов известно, что при выпуклых липшицевых функциях и удачном начальном приближении метод имеет квадратичную скорость сходимости, что выделяет его среди прочих итерационных методов. Но несмотря на это, он имеет и недостатки, которые особенно заметны при численных экспериментах.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
[[Файл:newton_Flops.png]]&lt;br /&gt;
[[Файл:newton_Time.png]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=15205</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=15205"/>
		<updated>2016-10-31T18:04:45Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Будем оценивать сложность одной итерации метода Ньютона.&amp;lt;br&amp;gt;&lt;br /&gt;
Для начала оценим сложность решения СЛАУ &amp;lt;br&amp;gt;&lt;br /&gt;
Будем считать, что наша исходная матрица была порядка n.&lt;br /&gt;
Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt; и матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;n*k&amp;lt;/math&amp;gt;. QR-факторизация матрицы &amp;lt;math&amp;gt;H_k&amp;lt;/math&amp;gt; будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
При решении задачи минимизации нам необходимо:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Решить СЛАУ с верхнетреугольной матрицей порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; для нахождения &amp;lt;math&amp;gt;y_k&amp;lt;/math&amp;gt; - сложность &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
2) Умножить матрицу &amp;lt;math&amp;gt;Q_k&amp;lt;/math&amp;gt; на найденный вектор - сложность &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt; арифметических операций.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Сложить 2 вектора длины n - &amp;lt;math&amp;gt;O(n).&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n).&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций.&amp;lt;br&amp;gt;&lt;br /&gt;
Отметим, что данная оценка справедлива при небольших &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; относительно &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=15192</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=15192"/>
		<updated>2016-10-31T17:34:07Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=14944</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=14944"/>
		<updated>2016-10-30T20:52:38Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить вычислительные затраты, необходимые нахождения QR-разложения матрицы &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=14938</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=14938"/>
		<updated>2016-10-30T20:42:54Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы для перехода от m к m+1&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить затраты, необходимые для расчета матрицы &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;, необходимые для расчета вектора минимизации &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=14936</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=14936"/>
		<updated>2016-10-30T20:40:29Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Не будем подробно останавливаться на описании решения задачи оптимизации.&amp;lt;br&amp;gt;&lt;br /&gt;
Однако, важно отметить, что расчет матриц &amp;lt;math&amp;gt;\Omega_m, R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt; можно упростить, используя формулы для перехода от m к m+1.&amp;lt;br&amp;gt;&lt;br /&gt;
Модифицируя алгоритм Арнольди соответствующим образом, мы можем ощутимо снизить затраты, необходимые для расчета матрицы &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; и вектора &amp;lt;math&amp;gt;g_m&amp;lt;/math&amp;gt;, необходимые для расчета вектора минимизации &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате, основной интерес для нас представляет решение СЛАУ &amp;lt;math&amp;gt;R_my_m=g_m&amp;lt;/math&amp;gt;. Так как матрица &amp;lt;math&amp;gt;R_m&amp;lt;/math&amp;gt; является верхнетреугольной, то вычисление вектора &amp;lt;math&amp;gt;y_m&amp;lt;/math&amp;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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=14897</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=14897"/>
		<updated>2016-10-30T18:04:52Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основные авторы описания: [[U:Александр Чернышев|Александр Чернышев]], [[U:N Zakharov|Никита Захаров]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Метод Ньютона&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;Решение задачи минимизации&amp;lt;br&amp;gt;&lt;br /&gt;
Наша цель состоит в нахождении вектора &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt;, минимизирующего задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \|, \, &amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; матрица размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
В результате применения QR-декомпозиции к матрице &amp;lt;math&amp;gt;\tilde{H}_n&amp;lt;/math&amp;gt; находим ортогональную матрицу &amp;lt;math&amp;gt;\Omega_n&amp;lt;/math&amp;gt; размера (n+1) на (n+1)&lt;br /&gt;
и верхнюю треугольную матрицу &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; размера (n+1) на n.&lt;br /&gt;
&amp;lt;br&amp;gt;При этом в матрице &amp;lt;math&amp;gt;\tilde{R}_n&amp;lt;/math&amp;gt; последняя строка будет нулевой, то есть ее можно представить в следующем виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;math&amp;gt; \tilde{R}_n = \begin{bmatrix} R_n \\ 0 \end{bmatrix}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Перепишем нашу исходную задачу &amp;lt;math&amp;gt; \| \tilde{H}_n y_n - \beta e_1 \| = \| \Omega_n (\tilde{H}_n y_n - \beta e_1) \| = \| \tilde{R}_n y_n - \beta \Omega_n e_1 \|. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Положим &amp;lt;math&amp;gt;\beta\Omega_ne_1=\tilde{g}_n&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;где &amp;lt;math&amp;gt; \tilde{g}_n = \begin{bmatrix} g_n \\ \gamma_n \end{bmatrix} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Вектор &amp;lt;math&amp;gt;y_n&amp;lt;/math&amp;gt; находится из следующего соотношения &amp;lt;math&amp;gt; y_n = R_n^{-1} g_n. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12164</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12164"/>
		<updated>2016-10-15T21:31:08Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Вычислительное ядро алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&amp;lt;br&amp;gt;&lt;br /&gt;
В результате мы получаем матрицу &amp;lt;math&amp;gt;H^{{m+1}\times{m}}&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12152</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12152"/>
		<updated>2016-10-15T21:26:04Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Существующие реализации алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Из существующих реализаций важно отметить пакет PETSc и его компонент SNES, позволяющий решать системы нелинейных уравнений методом Ньютона&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.mcs.anl.gov/petsc/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12135</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12135"/>
		<updated>2016-10-15T21:19:21Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Входные и выходные данные алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&lt;br /&gt;
[[Файл:Newton159.png|thumb|600px|center| Рис. 2. Итерация]]&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;br&amp;gt;&amp;lt;math&amp;gt;n^2 + n&amp;lt;/math&amp;gt; функций от &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; переменных&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; вещественных чисел&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12081</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12081"/>
		<updated>2016-10-15T21:02:22Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Схема реализации последовательного алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений алгоритмом GMRES &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&lt;br /&gt;
[[Файл:Newton159.png|thumb|600px|center| Рис. 2. Итерация]]&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;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12047</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12047"/>
		<updated>2016-10-15T20:57:23Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Макроструктура алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;x_k&amp;lt;/math&amp;gt;&lt;br /&gt;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&lt;br /&gt;
[[Файл:Newton159.png|thumb|600px|center| Рис. 2. Итерация]]&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;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</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:N_Zakharov/%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&amp;diff=12037</id>
		<title>Участник:N Zakharov/Метод Ньютона для решения систем нелинейных уравнений</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:N_Zakharov/%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&amp;diff=12037"/>
		<updated>2016-10-15T20:56:33Z</updated>

		<summary type="html">&lt;p&gt;N Zakharov: /* Вычислительное ядро алгоритма */&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(kn^3)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;000&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;000&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;
==== Историческая справка ====&lt;br /&gt;
Метод был описан Исааком Ньютоном в рукописи «Об анализе уравнениями бесконечных рядов» (лат. «De analysi per aequationes numero terminorum infinitas»), адресованной в 1669 году Барроу, и в работе «Метод флюксий и бесконечные ряды» (лат. «De metodis fluxionum et serierum infinitarum») или «Аналитическая геометрия» (лат. «Geometria analytica») в собраниях трудов Ньютона, которая была написана в 1671 году. В своих работах Ньютон вводит такие понятия, как разложение функции в ряд, бесконечно малые и флюксии (производные в нынешнем понимании). Указанные работы были изданы значительно позднее: первая вышла в свет в 1711 году благодаря Уильяму Джонсону, вторая была издана Джоном Кользоном в 1736 году уже после смерти создателя. Однако описание метода существенно отличалось от его нынешнего изложения: Ньютон применял свой метод исключительно к полиномам. Он вычислял не последовательные приближения &amp;lt;math&amp;gt;x_{n}&amp;lt;/math&amp;gt;, а последовательность полиномов и в результате получал приближённое решение &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;.&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;
В 1879 году Артур Кэли в работе «Проблема комплексных чисел Ньютона — Фурье» (англ. «The Newton-Fourier imaginary problem») был первым, кто отметил трудности в обобщении метода Ньютона на случай мнимых корней полиномов степени выше второй и комплексных начальных приближений. Эта работа открыла путь к изучению теории фракталов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
В этой статье мы сразу сформулируем задачу для многомерного случая и не будем останавливаться на  методе Ньютона для одномерных задач &amp;lt;ref&amp;gt;Тыртышников Е. Е. Методы численного анализа — М., Академия, 2007. - 320 c.&amp;lt;/ref&amp;gt; &amp;lt;ref&amp;gt;Бахвалов Н. С.,  Жидков Н. П., Кобельков. Г. М. — 6-е изд. — М. : БИНОМ. Лаборатория знаний, 2008. — 636 с.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть необходимо найти решение системы: &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0&lt;br /&gt;
\\ ...&lt;br /&gt;
\\ f_n(x_1, ..., x_n) = 0,&lt;br /&gt;
&lt;br /&gt;
\end{matrix}\right.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = (f_1, ..., f_n) : \mathbb{R}^n \rightarrow \mathbb{R}^n&amp;lt;/math&amp;gt; - непрерывно дифференцируемое отображение в окрестности решения.&lt;br /&gt;
&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При начальном приближении &amp;lt;math&amp;gt;x_0&amp;lt;/math&amp;gt; и сделанных предположениях &amp;lt;math&amp;gt;(k+1)&amp;lt;/math&amp;gt;-я итерация метода будет выглядеть следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;  &lt;br /&gt;
x_{k+1} = x_k - [f&#039;(x_k)]^{-1}f(x_k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекционные итерационные методы основываются на тех же принципах, что и методы, которые используются для задач поиска собственных значений. На самом деле, многие методы Крылова напрямую вытекают из алгоритмов Арнольди&amp;lt;ref&amp;gt;Daniel F. Gill, NEWTON-KRYLOV METHODS FOR THE SOLUTION OF THE k-EIGENVALUE PROBLEM IN MULTIGROUP NEUTRONICS CALCULATIONS, 2009 &amp;lt;/ref&amp;gt;. Приближенное решение можно найти по формуле &amp;lt;math&amp;gt;\tilde{x} = x_0 + V_my&amp;lt;/math&amp;gt;, а после подставления условий Петрова-Гарелкина оно принимает вид &amp;lt;math&amp;gt;\tilde{x} = x_0 + V (W^TAV)^{-1}W^Tr_0&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r_0 = b - Ax_0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V = \{v_1, v_2, ..., v_m\}&amp;lt;/math&amp;gt; - матрица, чьи столбцы являются ортонормированным базисом пространства, а матрица &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; находится из соотношения &amp;lt;math&amp;gt;W^HV = I&amp;lt;/math&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;V^T_mAV_m = H_m&amp;lt;/math&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;G(y) = \left \| b-Ax \right \| = \left \| b-A(x_0+V_my) \right \| = \left \| r_0 -AV_my \right \|&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; https://en.wikipedia.org/wiki/Generalized_minimal_residual_method#Solving_the_least_squares_problem&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Описание алгоритма Арнольди&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;r_0&amp;lt;/math&amp;gt; - произвольный входной вектор &lt;br /&gt;
&amp;lt;math&amp;gt;v_1&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;r_0/\begin{Vmatrix}r_0\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;m = 1,2,...,k &amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;\omega_m&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;Av_k&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Для&#039;&#039;&#039; &amp;lt;math&amp;gt;j = 1,2, ..,m &amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;h_{jm}=(\omega_m, v_j)&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;\omega_m=\omega_m-h_{jm}v_j&amp;lt;/math&amp;gt;&lt;br /&gt;
      &#039;&#039;&#039;Конец&#039;&#039;&#039;&lt;br /&gt;
      &amp;lt;math&amp;gt;h_{m+1,m}=\begin{Vmatrix}\omega_m\end{Vmatrix}&amp;lt;/math&amp;gt;&lt;br /&gt;
      &amp;lt;math&amp;gt;v_{m+1}=\omega_m/h_{m+1,m}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &#039;&#039;&#039;Конец&#039;&#039;&#039;&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;
: Вычисление вектора &amp;lt;math&amp;gt;F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
: WHILE (условие остановки не выполнено)&lt;br /&gt;
:: Вычисление якобиана &amp;lt;math&amp;gt;J(x_k) = F&#039;(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Решение линейной системы уравнений &amp;lt;math&amp;gt;J(x_k)s_k = -F(x_k)&amp;lt;/math&amp;gt;&lt;br /&gt;
:: &amp;lt;math&amp;gt;x_k = x_k + s_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:: Вычисление вектора &amp;lt;math&amp;gt;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;
Вычислительная сложность GMRES алгоритма зависит от сложности метода, используемого для решения задачи минимизации. Предположим, что мы нашли решение СЛАУ за &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; итераций. В результате выполнения алгоритма Арнольди мы получаем матрицу размера &amp;lt;math&amp;gt;(k+1)*k&amp;lt;/math&amp;gt;. QR-факторизация данной матрицы будет стоить нам порядка &amp;lt;math&amp;gt;O(k^2)&amp;lt;/math&amp;gt; арифметических операций. Однако, при условии, что мы будем обновлять QR-факторизацию на каждом шаге, что возможно(ссылка на википедию на тот метод), то сложность решения задачи минимизации составит даже &amp;lt;math&amp;gt;O(k)&amp;lt;/math&amp;gt;. Сложность алгоритма Арнольди при этом составляет &amp;lt;math&amp;gt;O(k*n)&amp;lt;/math&amp;gt; арифметических операций плюс сложность &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; раз умножения матрицы на вектор - &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
Сложность оставшихся операций из алгоритма Ньютона (сложение векторов + подсчет нормы) составляет &amp;lt;math&amp;gt;O(2*n) &amp;lt;/math&amp;gt;&lt;br /&gt;
В результате мы получаем, что на одну итерацию метода Ньютона нужно &amp;lt;math&amp;gt;O(k*n^2)&amp;lt;/math&amp;gt; операций&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Newton157.png|thumb|600px|center| Рис. 1. Общая схема]]&lt;br /&gt;
[[Файл:Newton159.png|thumb|600px|center| Рис. 2. Итерация]]&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;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных&#039;&#039;&#039;: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references \&amp;gt;&lt;/div&gt;</summary>
		<author><name>N Zakharov</name></author>
	</entry>
</feed>