Участник:MukhayevD/Метод Ньютона: различия между версиями
MukhayevD (обсуждение | вклад) |
MukhayevD (обсуждение | вклад) |
||
Строка 37: | Строка 37: | ||
Последовательность исполнения метода следующая: | Последовательность исполнения метода следующая: | ||
− | 1. Выбираем начальное приближение <math> x_0 </math> | + | 1. Выбираем начальное приближение <math> x_0 </math> |
− | + | 2. Находим значение функции <math> f(x_n) </math> в точке <math>x_n</math>. | |
− | 2. Находим значение функции <math> f(x_n) </math> в точке x_n. | + | 3. Находим значение производной функции <math> f^'(x_n) </math> в точке <math>x_n</math>. |
− | + | 4. Получаем следующий шаг итерации <math> x_{n+1} </math><math> x_{n+1} = x_n - f(x_n)/f^'(x+n) </math> | |
− | 3. Находим значение производной функции <math> f^'(x_n) </math> в точке x_n. | + | 5. Находим погрешность <math> e = |x_{n+1} - x_n| </math> |
− | + | 6. Если погрешность не превышает некоторого заранее заданного числа - останавливаемся. | |
− | 4. Получаем следующий шаг итерации <math> x_{n+1} </math> | ||
− | |||
− | <math> x_{n+1} = x_n - f(x_n)/f^'(x+n) </math> | ||
− | |||
− | 5. Находим погрешность <math> e = |x_{n+1} - x_n| </math> | ||
− | |||
− | 6. Если погрешность не превышает некоторого заранее заданного числа - останавливаемся. | ||
<math> e < \varepsilon </math> | <math> e < \varepsilon </math> | ||
Строка 80: | Строка 73: | ||
=== Ресурс параллелизма алгоритма === | === Ресурс параллелизма алгоритма === | ||
+ | |||
+ | Несмотря на то, что сам по себе алгоритм является строго последовательным, его можно ускорить за счет распараллеливания нахождения функции и ее производной на текущей итерации, так как это было описано в предыдущем пункте. | ||
+ | |||
+ | Пусть имеем <math> p </math> процессоров, в таком случае каждому процессору нужно будет произвести <math> (4n-3)/p </math> умножений. | ||
=== Входные и выходные данные алгоритма === | === Входные и выходные данные алгоритма === | ||
− | + | Входными данными алгоритма являются: | |
− | + | 1. Функция в виде полинома. | |
+ | 2. Область, в которой ищется корень <math> (a;b) </math>. | ||
+ | 3. Начальное приближение <math> x_0 </math>. | ||
+ | 4. Точность, с которой требуется найти решение. | ||
− | + | На выход алгоритмом выдается число - предположительный корень найденный с заданной точностью. | |
− | == | + | == Программная реализация алгоритма == |
− | |||
− | |||
=== Масштабируемость алгоритма и его реализации === | === Масштабируемость алгоритма и его реализации === | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
=== Существующие реализации алгоритма === | === Существующие реализации алгоритма === |
Версия 00:03, 24 ноября 2016
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 2 Программная реализация алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Метод Ньютона, алгоритм Ньютона (также известный как метод касательных) — это итерационный численный метод нахождения корня заданной функции(в связи с трудностями программирования производной для произвольной функции рассматриваются только функции в виде полинома). Метод был впервые предложен английским физиком, математиком и астрономом Исааком Ньютоном (1643—1727). Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации. Метод обладает квадратичной сходимостью. Модификацией метода является метод хорд и касательных.
1.2 Математическое описание алгоритма
Пусть [math] x_n [/math] - некоторое приближение к корню уравнения [math] f(x) = 0, f \in C^1 [/math], то следующее приближение определяется как корень касательной к функции [math] f(x) [/math], проведенной в точке [math] x_n [/math].
Уравнение касательной к функции [math] f(x) [/math] в точке [math] x_n [/math] имеет вид: [math] f^'(x_n) = (y - f(x_n))/(x - x_n) [/math] В уравнении касательной положим [math] y = 0 [/math] и [math] x = x_{n+1} [/math]. Тогда алгоритм последовательных вычислений в методе Ньютона состоит в следующем: [math] x_{n+1} = x_n - f(x_n)/f^'(x_n) [/math] Сходимость метода касательных квадратичная, порядок сходимости равен 2.
1.3 Вычислительное ядро алгоритма
Основная вычислительная нагрузка алгоритма заключается в нахождении [math] \varphi(x_n) = f(x_n)/f^'(x_n) [/math], которая в последствии используется для нахождения [math] x_{n+1} = x_n - \varphi(x_n) [/math]
1.4 Макроструктура алгоритма
Как и было описано в описании ядра алгоритма, основную часть метода составляет вычисление значения функции [math] f(x_n) [/math] и ее производной [math] f^'(x_n) [/math] в точке x_n.
[math] f(x_n) = \sum_{i=0}^{n}f_ix_n^i [/math]
[math] f^'(x_n) = \sum_{i=0}^{n-1}f^'_ix_n^i [/math]
1.5 Схема реализации последовательного алгоритма
Последовательность исполнения метода следующая:
1. Выбираем начальное приближение [math] x_0 [/math] 2. Находим значение функции [math] f(x_n) [/math] в точке [math]x_n[/math]. 3. Находим значение производной функции [math] f^'(x_n) [/math] в точке [math]x_n[/math]. 4. Получаем следующий шаг итерации [math] x_{n+1} [/math][math] x_{n+1} = x_n - f(x_n)/f^'(x+n) [/math] 5. Находим погрешность [math] e = |x_{n+1} - x_n| [/math] 6. Если погрешность не превышает некоторого заранее заданного числа - останавливаемся.
[math] e \lt \varepsilon [/math]
1.6 Последовательная сложность алгоритма
Для вычисления корня методом Ньютона при последовательном выполнении требуется:
- [math] n [/math] сложение + [math] n [/math] умножений + [math] n-1 [/math] умножений (возведение в степень)
- [math] n-1 [/math] сложение + [math] n-1 [/math] умножений + [math] n-2 [/math] умножений (возведение в степень)
- одно вычитание и одно деление
- одно вычитание
Следовательно для одного шага алгоритма требуется:
- [math] 2n-1 [/math] сложение (вычитание)
- [math] 4n-3 [/math] умножений (делений)
1.7 Информационный граф
На рисунке ниже изображена структура информационного графа алгоритма. Блок IN представляет собой выбор начального приближения, блок IT - итерацию алгоритма, блок OUT - концу работы алгоритма.
Как видно, алгоритм строго последовательный. Ниже подробнее рассмотрено как можно разделить нагрузку связанную с вычислениями [math] f(x) [/math] между процессорами. Каждое слагаемое полинома считается отдельно.
Аналогично для [math] f^'(x) [/math].
1.8 Ресурс параллелизма алгоритма
Несмотря на то, что сам по себе алгоритм является строго последовательным, его можно ускорить за счет распараллеливания нахождения функции и ее производной на текущей итерации, так как это было описано в предыдущем пункте.
Пусть имеем [math] p [/math] процессоров, в таком случае каждому процессору нужно будет произвести [math] (4n-3)/p [/math] умножений.
1.9 Входные и выходные данные алгоритма
Входными данными алгоритма являются:
1. Функция в виде полинома. 2. Область, в которой ищется корень [math] (a;b) [/math]. 3. Начальное приближение [math] x_0 [/math]. 4. Точность, с которой требуется найти решение.
На выход алгоритмом выдается число - предположительный корень найденный с заданной точностью.
2 Программная реализация алгоритма
2.1 Масштабируемость алгоритма и его реализации
2.2 Существующие реализации алгоритма
3 Литература
<references \>