Участник:Арутюнов А.В.: различия между версиями
Строка 190: | Строка 190: | ||
Как уже было отмечено выше, характеристики реализации алгоритма сильно зависят от выбранного способа нахождения матрицы Якоби и решения СЛАУ. | Как уже было отмечено выше, характеристики реализации алгоритма сильно зависят от выбранного способа нахождения матрицы Якоби и решения СЛАУ. | ||
− | Для примера рассмотрим реализацию | + | Для примера рассмотрим реализацию с использованием метода Гаусса на функциях вида: |
− | < | + | <math>f_i(x) = cos(x_i) - 1</math> |
− | |||
− | |||
==Динамические характеристики и эффективность реализации алгоритма== | ==Динамические характеристики и эффективность реализации алгоритма== |
Версия 16:00, 1 февраля 2017
Решение системы нелинейных уравнений методом Ньютона | |
Последовательный алгоритм | |
Последовательная сложность | O(n^3) - одна итерация |
Объём входных данных | n^2 + n функций от n переменных, n мерный вектор, x^0 - начальное приближение, ε - точность решения. |
Объём выходных данных | n-мерный вектор вещественных чисел |
Автор описания: Арутюнов А.В., Жилкин А.С.
Решение системы нелинейных уравнений методом Ньютона
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Метод Ньютона для решение систем нелинейных уравнений - обобщение классического метода Ньютона[1] Это итерационный численный метод нахождения корня (нуля) заданной функции. Модификацией метода является метод хорд и касательных.
Классический метод Ньютона или касательных заключается в том, что если x_n — некоторое приближение к корню x_* уравнения f(x)=0, f(x) \in C^1, то следующее приближение определяется как корень касательной f(x) к функции, проведенной в точке x_n.
Метод был предложен Исааком Ньютоном в 1669 году. Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации.
1.2 Математическое описание алгоритма
Идея метода заключается в линеаризации уравнений системы [2]
\left\{\begin{matrix}f_1(x_1, ..., x_n) = 0
\\ f_2(x_1,...x_n)=0,
\\ ...,
\\ f_n(x_1, ..., x_n) = 0,
\end{matrix}\right.
Что позволяет свести исходную задачу СНУ(система нелинейных уравнений) к многократному решению системы линейных уравнений.
Пусть известно приближение (x_i)^{(k)} решения системы нелинейных уравнений (x_i)^*.Введем в рассмотрение поправку \Delta x_i как разницу между решением и его приближением: \Delta x_i = (x_i)^* -(x_i)^{(k)} \Rightarrow (x_i)^*=(x_i)^{(k)} + \Delta x_i, i=\overline{(1,n)}
Подставим полученное выражение для (x_i)^* в исходную систему.
\left\{\begin{matrix} f_1((x_1)^{(k)} + \Delta x_1, (x_2)^{(k)}+ \Delta x_2, ..., (x_n)^{(k)} + \Delta x_n) = 0,
\\ f_2((x_1)^{(k)} + \Delta x_1, (x_2)^{(k)} + \Delta x_2, ..., (x_n)^{(k)} + \Delta x_n) = 0,
\\ ...
\\ f_n((x_1)^{(k)} + \Delta x_1, (x_2)^{(k)} + \Delta x_2, ..., (x_n)^{(k)} + \Delta x_n) = 0,
\end{matrix}\right.
Неизвестными в этой системе нашейных уравнений являются поправки \Delta x_i . Для определения \Delta x_i нужно решить эту систему. Но решить эту задачу так же сложно, как и исходную. Однако эту систему можно линеаризовать и, решив её, получить приближённые значения поправок \Delta x_i для нашего приближения, т.е. \Delta (x_i)^{(k)}. Эти поправки не позволяют сразу получить точное решение (x_i)^*, но дают возможность приблизиться к решению, - получить новое приближение решения ((x_i)^{(k+1)} = ((x_i)^{(k)} + ( \Delta x_i)^{(k)}, i = \overline{(1,n)}
Для линеаризации системы следует разложить функцию f_i в ряды Тейлора в окрестности (x_i)^k, ограничиваясь первыми дифференциалами. Полученная система имеет вид:
\sum_{i=1}^n\frac{ \partial f_i({x_1}^{(k)}, {x_2}^{(k)}, ..., {x_n}^{(k)})}{ \partial x_i} \Delta {x_i}^{(k)}= -f_j({x_1}^{(k)}, {x_2}^{(k)}, ..., {x_n}^{(k)}), j=\overline{(1,n)}
Все коэффициенты этого уравнения можно вычислить, используя последнее приближение решения (x_i)^{(k)}. Для решения системы линейных уравнений при n=2,3 можно использовать формулы Крамера, при большей размерности системы n - метод исключения Гаусса.
Значения поправок используются для оценки достигнутой точности решения. Если максимальная по абсолютной величине поправка меньше заданной точности \varepsilon, расчет завершается. Таким образом, условие окончания расчета:
\delta =\min_{ i=\overline{(1,n)}}|\Delta {x_i}^{(k)}|
Можно использовать и среднее значение модулей поправок:
\delta = \frac{1}{n}\sum_{i=1}^n |\Delta x_i|\lt \varepsilon
В матричной форме систему можно записать как:
W(\Delta X^k)*X^{(k)} = -F(X^k)
где W(x) - матрица Якоби(производных):
W(x)=(\frac{\partial f_j}{\partial x_i})_{n,n}= \left\{\begin{matrix}(\frac{\partial f_1}{\partial x_1} \frac{\partial f_1}{\partial x_2} ... \frac{\partial f_1}{\partial x_n}) \\ ... ... ... ... \\( \frac{\partial f_n}{\partial x_1} \frac{\partial f_n}{\partial x_2} ... \frac{\partial f_n}{\partial x_n} ) \end{matrix}\right.
\Delta X^{(k)}= \left\{\begin{matrix} \Delta (x_1)^{(k)} \\ \Delta (x_2)^{(k)} \\ ... \\ \Delta (x_n)^{(k)} \end{matrix}\right.
F(x) - вектор-функция
W(X^{(k)}) - матрица Якоби, вычисленная для очередного приближения F(X^{(k)}) - вектор-функция, вычисленная для очередного приближения
Выразим вектор поправок X^{(k)}=-W^{-1}(X^{(k)})*F(X^{(k)}) :
W^{-1}, где W^{-1}
Окончательная формула последовательных приближений метода Ньютона решения СНУ в матричной форме имеет вид:
X^{(k+1)}=X^{(k)}=W^{-1}(X^{(k)})*F(X^{(k)})
1.3 Вычислительное ядро алгоритма
Основная вычислительная нагрузка приходится на
1) Решение СЛАУ: F(X^{(k)})=\frac{\partial F(x^{(k)})}{\partial x} \Delta x^{(k)}
2)Численное вычисление Якобиана(если производные не даны): \frac{\partial F(x^{(k)})}{\partial x}
1.4 Макроструктура алгоритма
Данный алгоритм использует два основных метода решения в каждой итерации, это нахождением матрицы Якоби и решение СЛАУ.
1.5 Схема реализации последовательного алгоритма
1)Задаётся размерность системы n, требуемая точность, начальное приближённое решение X=(x_i)_n
2)Вычисляются элементы матрицы Якоби W=\left( {\partial f_i\over \partial x_i} \right)_{n,n}
3)Вычисляется обратная матрица W^{-1}
4)Вычисляются вектор функция F=(f_i)_n, f_i=f_i(x_1, x_2,..., x_n), i=1,...,n
5)Вычисляются вектор поправок \Delta X=W_{-1}*F
6)Уточняется решение X_{n+1}=X_n+\Delta X
7)Оценивается достигнутая точность \delta = \max_{i=1,n} \Delta x_i^k
8)Проверяется условие завершения итерационного процесса \delta\lt =\varepsilon
1.6 Последовательная сложность алгоритма
Сперва стоит отметить, что итоговая сложность алгоритма зависит от того, насколько быстро он будет сходиться. Это в свою очередь зависит от заданного начального приближения x^0 и от условия остановки алгоритма \varepsilon. Можно однако вычислить сложность одного шага итерации алгоритма.
Предполагаем, что у нас нет значений производных заданных функций
f_1(.), f_2(.), ..., f_n(.).
Тогда используя формулу центральной разности для производной :
f_i'(x) = (f(x+h) - f(x-h))/2h ,
мы находим приближённое значение производной в интересующей нас точке за 5 операций.
Учитывая, что в Якобиане содержится n^2 элементов - производные каждой функции по каждой переменной, - то для нахождения Якобиана нам суммарно требуется
O(5n^2) = O(n^2)
операций. Сложность вычислений обратной матрицы
W^{-1}
зависит от выбранного алгоритма решения полученной СЛАУ. Будем использовать метод Гаусса. В таком случае сложность составит
O(n^3).
Таким образом сложность вычислительного ядра алгоритма составляет
O(n^2)+O(n^3) = O(n^3)
для одного шага алгоритма.
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
Не смотря на то, что метод Ньютона является методом последовательных итераций, его можно распараллелить. Ресурс для параллелизма заключается в решение СЛАУ и вычислении Якобианов. Рассмотрим решение параллельным методом Гаусса на p процессорах.
Сложность вычисление элементов матрицы Якоби - производных \frac{\partial F(x^{(k)})}{\partial x} в случае, если они не заданы будет - O(n^2/p).
Решение СЛАУ F(X^{(k)}) = \frac{\partial F(x^{(k)})}{\partial x} \Delta x^{(k)} одним из параллельных методов [3] имеет сложность O(n^3/p).
Пусть алгоритм имеет N итераций, тогда итоговая сложность будет: O(N \cdot \frac{n^3}{p})
1.9 Входные и выходные данные алгоритма
Входные данные: n^2 + n функций от n переменных, n мерный вектор, x^0 - начальное приближение, \varepsilon - точность решения.
Выходные данные: n вещественных чисел
1.10 Свойства алгоритма
Для данного метода трудно универсально оценить соотношение последовательной и параллельной сложностей алгоритма, поскольку это зависит непосредственно от вида задаваемых нелинейных функций, способа решения СЛАУ и выбора начального приближения.
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
Как уже было отмечено выше, характеристики реализации алгоритма сильно зависят от выбранного способа нахождения матрицы Якоби и решения СЛАУ.
Для примера рассмотрим реализацию с использованием метода Гаусса на функциях вида:
f_i(x) = cos(x_i) - 1
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
3 Литература
<references \> https://ru.wikipedia.org/wiki/Метод_Ньютона Тыртышников Е. Е. "Методы численного анализа" — М., Академия, 2007. - 320 c.
http://www.intuit.ru/studies/courses/4447/983/lecture/14931
- ↑ https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%9D%D1%8C%D1%8E%D1%82%D0%BE%D0%BD%D0%B0
- ↑ Тыртышников Е. Е. "Методы численного анализа" — М., Академия, 2007. - 320 c.
- ↑ http://www.intuit.ru/studies/courses/4447/983/lecture/14931