Метод Ньютона: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Новая страница: « == Свойства и структура алгоритма == === Общее описание алгоритма === Метод Ньютона, алгори…»
 
Нет описания правки
 
(не показаны 2 промежуточные версии этого же участника)
Строка 6: Строка 6:
Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) — это итерационный численный метод нахождения корня заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. Метод обладает квадратичной сходимостью. Модификацией метода является метод хорд и касательных. Также метод Ньютона может быть использован для решения задач оптимизации, в которых требуется определить нуль первой производной либо градиента в случае многомерного пространства.
Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) — это итерационный численный метод нахождения корня заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. Метод обладает квадратичной сходимостью. Модификацией метода является метод хорд и касательных. Также метод Ньютона может быть использован для решения задач оптимизации, в которых требуется определить нуль первой производной либо градиента в случае многомерного пространства.


В данной статье мы будем рассматривать только функции-многочлены. Поскольку они могут иметь несколько корней, чтобы попытаться найти их все, необходимо провести перебор начальных приближений. При нас интересуют не только действительные корни, но и комплексные, будет производить перебор по некоторой сетке на комплексной плоскости.
Поскольку функция может иметь несколько корней, чтобы попытаться найти их все, необходимо провести перебор начальных приближений. При нас интересуют не только действительные корни, но и комплексные, будет производить перебор по некоторой сетке на комплексной плоскости.


=== Математическое описание алгоритма ===
=== Математическое описание алгоритма ===


Пусть задан некоторый многочлен <math>\ f(x) </math> и сетка на комплексной плоскости вида
Пусть задана некоторая функция <math>\ f(x) </math>, её производная <math>\ f'(x) </math> и сетка на комплексной плоскости вида
:<math>
:<math>
z_0 = \left( x_0 + \alpha \dfrac{x_1 - x_0}{N} \right) + i \cdot \left( y_0 + \beta \dfrac{y_1 - y_0}{M} \right), \qquad \alpha = \overline{1, N},\ \beta = \overline{1, M},
z_0 = \left( x_0 + \alpha \dfrac{x_1 - x_0}{N} \right) + i \cdot \left( y_0 + \beta \dfrac{y_1 - y_0}{M} \right), \qquad \alpha = \overline{1, N},\ \beta = \overline{1, M},
Строка 24: Строка 24:
==== Теоретическое обоснование ====
==== Теоретическое обоснование ====


Пусть <math>\ F(x)</math> — оператор, отображающий линейное нормированное пространство <math>H</math> на линейное нормированное пространство <math>Y</math>. Линейный оператор <math>P</math>, действующий из пространства <math>H</math> в пространство <math>Y</math> назовём производной оператора <math>F(x)</math> в точке <math>x</math>, если
Пусть <math>\ F(x)</math> — оператор, отображающий линейное нормированное пространство <math>H</math> на линейное нормированное пространство <math>Y</math>. Линейный оператор <math>P</math>, действующий из пространства <math>H</math> в пространство <math>Y</math>, назовём производной оператора <math>F(x)</math> в точке <math>x</math>, если
:<math>
:<math>
\| F(x + \eta) − F(x) − P\eta \|_Y = o(\| \eta \|_H).
\| F(x + \eta) − F(x) − P\eta \|_Y = o(\| \eta \|_H).
Строка 52: Строка 52:


Доказательство этой теоремы можно найти в литературе<ref>Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков, ''Численные методы''. Издательство «БИНОМ. Лаборатория знаний», 2008.</ref>.
Доказательство этой теоремы можно найти в литературе<ref>Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков, ''Численные методы''. Издательство «БИНОМ. Лаборатория знаний», 2008.</ref>.
=== Вычислительное ядро алгоритма ===
Вычислительную сложность алгоритма представляют операции вычисления значения функций в заданной точке, а так же операции вычитания и деления. При этом итерационный процесс запускается <math>N \cdot M</math> раз, а количество итераций в каждом процессе, вообще говоря, не определено; наиболее популярными условиями останова являются следующие:
:<math>
\| z_{n + 1} - z_{n} \| < \varepsilon,
</math>
:<math>
| f(z_{n}) | < \varepsilon.
</math>
Однако, для верхней оценки числа операций удобно зафиксировать число итераций в каждом процессе. Это так же позволит завершить вычисления в случае, если итерационный процесс не сходится.
=== Макроструктура алгоритма ===
Для обеспечения параллелизма сперва исходная сетка разбивается на <math>n</math> по возможности равных участков (например, на полосы длины <math>M</math>). В каждом участке последовательно запускаются итерационные процессы для каждого узла сетки, в ходе которых:
*1. вычисляются значения функций <math>\ f(z_k)</math>, <math>\ f'(z_k)</math> (предполагается, что функции заданы аналитически);
*2. вычисляется следующая точка:
:<math>
z_{k+1} = z_k - \dfrac{f(z_k)}{f'(z_k)};
</math>
*3. если условие останова не выполнено, переходим к шагу 1.
=== Схема реализации последовательного алгоритма ===
Последовательный алгоритм является частным случаем описанного алгоритма при <math>n = 1</math>.
=== Последовательная сложность алгоритма ===
=== Информационный граф ===
=== Ресурс параллелизма алгоритма ===
=== Входные и выходные данные алгоритма ===
=== Свойства алгоритма ===


== Программная реализация алгоритма ==
== Программная реализация алгоритма ==
=== Особенности реализации последовательного алгоритма ===
=== Локальность данных и вычислений ===
=== Возможные способы и особенности параллельной реализации алгоритма ===
=== Масштабируемость алгоритма и его реализации ===
=== Динамические характеристики и эффективность реализации алгоритма ===
=== Выводы для классов архитектур ===
=== Существующие реализации алгоритма ===


== Литература ==
== Литература ==


<references \>
<references \>

Текущая версия от 16:34, 22 октября 2017

Свойства и структура алгоритма

Общее описание алгоритма

Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) — это итерационный численный метод нахождения корня заданной функции. Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. Метод обладает квадратичной сходимостью. Модификацией метода является метод хорд и касательных. Также метод Ньютона может быть использован для решения задач оптимизации, в которых требуется определить нуль первой производной либо градиента в случае многомерного пространства.

Поскольку функция может иметь несколько корней, чтобы попытаться найти их все, необходимо провести перебор начальных приближений. При нас интересуют не только действительные корни, но и комплексные, будет производить перебор по некоторой сетке на комплексной плоскости.

Математическое описание алгоритма

Пусть задана некоторая функция [math]\displaystyle{ \ f(x) }[/math], её производная [math]\displaystyle{ \ f'(x) }[/math] и сетка на комплексной плоскости вида

[math]\displaystyle{ z_0 = \left( x_0 + \alpha \dfrac{x_1 - x_0}{N} \right) + i \cdot \left( y_0 + \beta \dfrac{y_1 - y_0}{M} \right), \qquad \alpha = \overline{1, N},\ \beta = \overline{1, M}, }[/math]

где [math]\displaystyle{ \ i }[/math] — мнимая единица.

Получим решения уравнения [math]\displaystyle{ \ f(z) = 0 }[/math] с помощью итерационного процесса, определяемого формулой:

[math]\displaystyle{ z_{k+1} = z_k - \dfrac{f(z_k)}{f'(z_k)}, }[/math]

где в качестве начального приближения [math]\displaystyle{ \ z_0 }[/math] перебираются всевозможные точки рассмотренной сетки.

Теоретическое обоснование

Пусть [math]\displaystyle{ \ F(x) }[/math] — оператор, отображающий линейное нормированное пространство [math]\displaystyle{ H }[/math] на линейное нормированное пространство [math]\displaystyle{ Y }[/math]. Линейный оператор [math]\displaystyle{ P }[/math], действующий из пространства [math]\displaystyle{ H }[/math] в пространство [math]\displaystyle{ Y }[/math], назовём производной оператора [math]\displaystyle{ F(x) }[/math] в точке [math]\displaystyle{ x }[/math], если

[math]\displaystyle{ \| F(x + \eta) − F(x) − P\eta \|_Y = o(\| \eta \|_H). }[/math]

Будем обозначать такой оператор [math]\displaystyle{ P }[/math] как [math]\displaystyle{ F′(x) }[/math].

Пусть [math]\displaystyle{ \ X }[/math] — решение уравнения [math]\displaystyle{ F(X) = 0 }[/math], [math]\displaystyle{ \ \Omega_a = \{ x: \| x - X \| \lt a \} }[/math]. Пусть также при некоторых [math]\displaystyle{ a \gt 0,\ a_1 \ge 0,\ a_2 \le \infty }[/math] выполнены условия:

[math]\displaystyle{ \label{requirement_one} \| (F'(X))^{-1} \|_{Y} \le a_1 \text{ при } x \in \Omega_a, }[/math]
[math]\displaystyle{ \| F(u_1) - F(u_2) - F'(u_2)(u_1 - u_2) \|_{Y} \le a_2 \|u_2 - u_1 \|_{H}^{2} \text{ при } u_1, u_2 \in \Omega_a. }[/math]

Обозначим [math]\displaystyle{ c = a_1 a_2 }[/math], [math]\displaystyle{ b = \min \{a, c^{-1}\} }[/math].

Метод Ньютона применим на основании следующей теоремы:

Теорема. Если выполнены указанные условия и начальное приближение [math]\displaystyle{ x_0 }[/math] принадлежит [math]\displaystyle{ \Omega_b }[/math], то итерационный процесс Ньютона

[math]\displaystyle{ x_{n + 1} = x_{n} - (F'(x_n))^{-1} F(x_n) }[/math]

сходится с оценкой погрешности

[math]\displaystyle{ \| x_n - X \|_{H} \le c^{-1} \left( c \| x_0 - X \|_{H} \right)^{2^n}. }[/math]

Доказательство этой теоремы можно найти в литературе[1].

Вычислительное ядро алгоритма

Вычислительную сложность алгоритма представляют операции вычисления значения функций в заданной точке, а так же операции вычитания и деления. При этом итерационный процесс запускается [math]\displaystyle{ N \cdot M }[/math] раз, а количество итераций в каждом процессе, вообще говоря, не определено; наиболее популярными условиями останова являются следующие:

[math]\displaystyle{ \| z_{n + 1} - z_{n} \| \lt \varepsilon, }[/math]
[math]\displaystyle{ | f(z_{n}) | \lt \varepsilon. }[/math]

Однако, для верхней оценки числа операций удобно зафиксировать число итераций в каждом процессе. Это так же позволит завершить вычисления в случае, если итерационный процесс не сходится.

Макроструктура алгоритма

Для обеспечения параллелизма сперва исходная сетка разбивается на [math]\displaystyle{ n }[/math] по возможности равных участков (например, на полосы длины [math]\displaystyle{ M }[/math]). В каждом участке последовательно запускаются итерационные процессы для каждого узла сетки, в ходе которых:

  • 1. вычисляются значения функций [math]\displaystyle{ \ f(z_k) }[/math], [math]\displaystyle{ \ f'(z_k) }[/math] (предполагается, что функции заданы аналитически);
  • 2. вычисляется следующая точка:
[math]\displaystyle{ z_{k+1} = z_k - \dfrac{f(z_k)}{f'(z_k)}; }[/math]
  • 3. если условие останова не выполнено, переходим к шагу 1.

Схема реализации последовательного алгоритма

Последовательный алгоритм является частным случаем описанного алгоритма при [math]\displaystyle{ n = 1 }[/math].

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Свойства алгоритма

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

Масштабируемость алгоритма и его реализации

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

Существующие реализации алгоритма

Литература

<references \>

  1. ↑ Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков, Численные методы. Издательство «БИНОМ. Лаборатория знаний», 2008.