Метод Ньютона: различия между версиями
| [непроверенная версия] | [непроверенная версия] |
Chist (обсуждение | вклад) |
Chist (обсуждение | вклад) Нет описания правки |
||
| Строка 73: | Строка 73: | ||
</math> | </math> | ||
*3. если условие останова не выполнено, переходим к шагу 1. | *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 \>
- ↑ Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков, Численные методы. Издательство «БИНОМ. Лаборатория знаний», 2008.