Уровень алгоритма

Участник:Арутюнов А.В.: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 16: Строка 16:
 
= Свойства и структура алгоритма =
 
= Свойства и структура алгоритма =
 
== Общее описание алгоритма ==
 
== Общее описание алгоритма ==
Это итерационный численный метод нахождения корня (нуля) заданной функции.
 
  
Классический метод Ньютона или касательных заключается в том, что если <math>x_n</math> — некоторое приближение к корню <math>x_*</math> уравнения <math>f(x)=0</math>, <math>f(x)</math> <math>C^1</math>, то следующее приближение определяется как корень касательной f(x) к функции, проведенной в точке <math>x_n</math>.
+
Это итерационный численный метод нахождения корня (нуля) заданной функции. Модификацией метода является метод хорд и касательных.
  
Уравнение касательной к функции f(x) в точке имеет вид:
+
Классический метод Ньютона или касательных заключается в том, что если <math>x_n</math> — некоторое приближение к корню <math>x_*</math> уравнения <math>f(x)=0</math>, <math>f(x) \in C^1</math>, то следующее приближение определяется как корень касательной <math> f(x)</math> к функции, проведенной в точке <math>x_n</math>.
 
 
<math>f^{(x_j)}=y-f(x_n)/(x-x_n)</math>
 
 
 
В уравнении касательной положим y=0 и <math>x=x_n+1</math>.
 
 
 
Тогда алгоритм последовательных вычислений в методе Ньютона состоит в следующем:
 
  
 
Метод был предложен Исааком Ньютоном в 1669 году. Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации.
 
Метод был предложен Исааком Ньютоном в 1669 году. Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации.
Строка 42: Строка 35:
 
<br /> <br />
 
<br /> <br />
  
Что позволяет свести исходную задачу СНУ к многократному решению системы линейных уравнений.
+
Что позволяет свести исходную задачу СНУ(система нелинейных уравнений) к многократному решению системы линейных уравнений.
  
 
Пусть известно приближение <math>(x_i)^{(k)}</math> решения системы нелинейных уравнений <math>(x_i)^*</math>.Введем в рассмотрение поправку <math>\Delta x_i</math> как разницу между решением и его приближением:
 
Пусть известно приближение <math>(x_i)^{(k)}</math> решения системы нелинейных уравнений <math>(x_i)^*</math>.Введем в рассмотрение поправку <math>\Delta x_i</math> как разницу между решением и его приближением:
Строка 58: Строка 51:
 
</math>
 
</math>
  
Неизвестными в этой системе нашейных уравнений являются поправки <math> \Delta x_i </math>. Для определения <math> \Delta x_i </math> нужно решить эту систему. Но решить эту задачу так же сложно, как и исходную. Однако эту систему можно линеаризовать, и, решив её, получить приближённые значения поправок <math>\Delta x_i</math> для нашего приближения, т.е. <math>\Delta (x_i)^{(k)}</math>. Эти поправки не позволяют сразу получить точное решение <math>(x_i)^*</math>, но дают возможность приблизиться к решению, - получить новое приближение решения  
+
Неизвестными в этой системе нашейных уравнений являются поправки <math>\Delta x_i </math>. Для определения <math>\Delta x_i </math> нужно решить эту систему. Но решить эту задачу так же сложно, как и исходную. Однако эту систему можно линеаризовать и, решив её, получить приближённые значения поправок <math>\Delta x_i</math> для нашего приближения, т.е. <math>\Delta (x_i)^{(k)}</math>. Эти поправки не позволяют сразу получить точное решение <math>(x_i)^*</math>, но дают возможность приблизиться к решению, - получить новое приближение решения  
 
<math>((x_i)^{(k+1)} = ((x_i)^{(k)} + ( \Delta x_i)^{(k)}, i = \overline{(1,n)}</math>  
 
<math>((x_i)^{(k+1)} = ((x_i)^{(k)} + ( \Delta x_i)^{(k)}, i = \overline{(1,n)}</math>  
  
Строка 96: Строка 89:
 
<math>W(X^{(k)})</math> - матрица Якоби, вычисленная для очередного приближения
 
<math>W(X^{(k)})</math> - матрица Якоби, вычисленная для очередного приближения
 
<math>F(X^{(k)})</math> - вектор-функция, вычисленная для очередного приближения
 
<math>F(X^{(k)})</math> - вектор-функция, вычисленная для очередного приближения
 
  
 
Выразим вектор поправок <math>X^{(k)}=-W^{-1}(X^{(k)})*F(X^{(k)})</math> :
 
Выразим вектор поправок <math>X^{(k)}=-W^{-1}(X^{(k)})*F(X^{(k)})</math> :
Строка 109: Строка 101:
 
Основная вычислительная нагрузка приходится на
 
Основная вычислительная нагрузка приходится на
  
1) Решение СЛАУ: <math>F(X^{(k)}) = \frac{\partial F(x^{(k)})}{\partial x} \Delta x^{(k)}</math>
+
1) Решение СЛАУ: <math>F(X^{(k)})=\frac{\partial F(x^{(k)})}{\partial x} \Delta x^{(k)}</math>
  
 
2)Численное вычисление Якобиана(если производные не даны): <math>\frac{\partial F(x^{(k)})}{\partial x}</math>
 
2)Численное вычисление Якобиана(если производные не даны): <math>\frac{\partial F(x^{(k)})}{\partial x}</math>
Строка 117: Строка 109:
  
 
== Схема реализации последовательного алгоритма ==
 
== Схема реализации последовательного алгоритма ==
1)Задаётся размерность системы <math>n</math>, требуемая точность , начальное приближённое решение <math>X=(x_i)_n</math>
+
1)Задаётся размерность системы <math>n</math>, требуемая точность, начальное приближённое решение <math>X=(x_i)_n</math>
  
2)Вычисляются элементы матрицы Якоби <math>W=\left( {f_i\over x_i} \right)_{n,n}</math>  
+
2)Вычисляются элементы матрицы Якоби <math>W=\left( {\partial f_i\over \partial x_i} \right)_{n,n}</math>  
  
 
3)Вычисляется обратная матрица <math>W^{-1} </math>
 
3)Вычисляется обратная матрица <math>W^{-1} </math>
Строка 168: Строка 160:
  
 
== Информационный граф ==
 
== Информационный граф ==
 +
 +
 
== Ресурс параллелизма алгоритма ==
 
== Ресурс параллелизма алгоритма ==
  
Строка 180: Строка 174:
  
 
== Входные и выходные данные алгоритма ==
 
== Входные и выходные данные алгоритма ==
'''Входные данные''': <math>n^2 + n</math> функций от <math>n</math> переменных, <math>n</math> мерный вектор, <math>x^0</math> - начальное приближение, </math>\varepsilon</math> - точность решения.  
+
'''Входные данные''': <math>n^2 + n</math> функций от <math>n</math> переменных, <math>n</math> мерный вектор, <math>x^0</math> - начальное приближение, <math>\varepsilon</math> - точность решения.  
  
 
'''Выходные данные''': <math>n</math> вещественных чисел
 
'''Выходные данные''': <math>n</math> вещественных чисел

Версия 16:57, 31 января 2017



Решение системы нелинейных уравнений методом Ньютона
Последовательный алгоритм
Последовательная сложность O(n^3) - одна итерация
Объём входных данных n^2 + n функций от n переменных, n мерный вектор, x^0 - начальное приближение, ε - точность решения.
Объём выходных данных n
Параллельный алгоритм
Высота ярусно-параллельной формы
Ширина ярусно-параллельной формы


Автор описания: Арутюнов А.В., Жилкин А.С.

Решение системы нелинейных уравнений методом Ньютона

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

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

Это итерационный численный метод нахождения корня (нуля) заданной функции. Модификацией метода является метод хорд и касательных.

Классический метод Ньютона или касательных заключается в том, что если x_n — некоторое приближение к корню x_* уравнения f(x)=0, f(x) \in C^1, то следующее приближение определяется как корень касательной f(x) к функции, проведенной в точке x_n.

Метод был предложен Исааком Ньютоном в 1669 году. Поиск решения осуществляется путём построения последовательных приближений и основан на принципах простой итерации.

1.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 ,

мы находим приближённое значение производной в интересующей нас точке с точностью порядка O(h^2) за 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)} одним из параллельных методов [2] имеет сложность 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 Масштабируемость алгоритма и его реализации

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

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

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

3 Литература