Численные методы решения систем нелинейных уравнений
Введение
Многие прикладные задачи приводят к необходимости нахождения общего решения системы нелинейных уравнений. Общего аналитического решения системы нелинейных уравнений не найдено. Существуют лишь численные методы.
Следует отметить интересный факт о том, что любая система уравнений над действительными числами может быть представлена одним равносильным уравнением, если взять все уравнения в форме , возвести их в квадрат и сложить.
Для численного решения применяются итерационные методы последовательных приближений (простой итерации) и метод Ньютона в различных модификациях. Итерационные процессы естественным образом обобщаются на случай системы нелинейных уравнений вида:
(1)
Обозначим через вектор неизвестных и определим вектор-функцию Тогда система (1) записывается в виде уравнения:
(2)
Теперь вернёмся к всеми любимому Python и отметим его первенство среди языков программирования, которые хотят изучать [1].
Этот факт является дополнительным стимулом рассмотрения числительных методов именно на Python. Однако, среди любителей Python бытует мнение, что специальные библиотечные функции, такие как scipy.optimize.root, spsolve_trianular, newton_krylov, являются самым лучшим выбором для решения задач численными методами.
С этим трудно не согласится хотя бы потому, что в том числе и разнообразие модулей подняло Python на вершину популярности. Однако, существуют случаи, когда даже при поверхностном рассмотрении использование прямых известных методов без применения специальных функций библиотеки SciPy тоже дают неплохие результаты. Иными словами, новое- это хорошо забытое старое.
Так, в публикации [2], на основании проведенных вычислительных экспериментов, доказано, что библиотечная функция newton_krylov, предназначенная для решения больших систем нелинейных уравнений, имеет в два раза меньшее быстродействие, чем алгоритм TSLS+WD
(two-step least squares), реализованный средствами библиотеки NumPy.
Целью настоящей публикации является сравнение по числу итераций, быстродействию, а главное, по результату решения модельной задачи в виде системы из ста нелинейных алгебраических уравнений при помощи библиотечной функции scipy.optimize.root и методом Ньютона, реализованного средствами библиотеки NumPy.
Возможности решателя scipy.optimize.root для численного решения систем алгебраических нелинейных уравнений
Библиотечная функция scipy.optimize.root выбрана в качестве базы сравнения, потому что имеет обширную библиотеку методов, пригодных для сравнительного анализа.
scipy.optimize.root(fun, x0, args=(), method=’hybr’, jac=None, tol=None,callback=None, ptions=None)
fun — Векторная функция для поиска корня.
x0 –Начальные условия поиска корней
method:
hybr -используется модификация Пауэлл гибридный метод;
lm – решает системы нелинейных уравнений методом наименьших квадратов.
Как следует из документации [3] методы broyden1, broyden2, anderson, linearmixing, diagbroyden, excitingmixing, krylov являются точными методами Ньютона. Остальные параметры являются «не обязательными» и с ними можно ознакомится в документации.
Методы решения систем нелинейных уравнений
Приведенный далее материал действительно можно прочитать в литературе, например в [4], но я уважаю своего читателя и для его удобства приведу вывод метода по возможности в сокращенном виде. Те, кто не любит формулы, этот раздел пропускают.
В методе Ньютона новое приближение для решения системы уравнений (2) определяется из решения системы линейных уравнений:
(3)
Определим матрицу Якоби:
(4)
Запишем(3) в виде:
(5)
Многие одношаговые методы для приближенного решения (2) по аналогии с двухслойными итерационными методами для решения систем линейных алгебраических уравнений можно записать в виде:
(6)
где — итерационные параметры, a — квадратная матрица n х n, имеющая обратную.
При использовании записи (6) метод Ньютона (5) соответствует выбору:
Система линейных уравнений (5) для нахождения нового приближения может решаться итерационно. В этом случае мы имеем двухступенчатый итерационный процесс с внешними и внутренними итерациями. Например, внешний итерационный процесс может осуществляться по методу Ньютона, а внутренние итерации — на основе итерационного метода Зейделя
При решении систем нелинейных уравнений можно использовать прямые аналоги стандартных итерационных методов, которые применяются для решения систем линейных уравнений. Нелинейный метод Зейделя применительно к решению (2) дает:
(7)
В этом случае каждую компоненту нового приближения из решения нелинейного уравнения, можно получить на основе метода простой итерации и метода Ньютона в различных модификациях. Тем самым снова приходим к двухступенчатому итерационному методу, в котором внешние итерации проводятся в соответствии с методом Зейделя, а внутренние — с методом Ньютона.
Основные вычислительные сложности применения метода Ньютона для приближенного решения систем нелинейных уравнений связаны с необходимостью решения линейной системы уравнений с матрицей Якоби на каждой итерации, причем от итерации к итерации эта матрица меняется. В модифицированном методе Ньютона матрица Якоби обращается только один раз:
(8)
Выбор модельной функции
Такой выбор не является простой задачей, поскольку при увеличении числа уравнений в системе в соответствии с ростом числа переменных результат решения не должен меняться, поскольку в противном случае невозможно отследить правильность решения системы уравнений при сравнении двух методов. Привожу следующее решение для модельной функции:
Функция f создаёт систему из n нелинейных уравнений, решение которой не зависит от числа уравнений и для каждой из n переменных равно единице.
Программа для тестирования на модельной функции c результатами решения системы алгебраических нелинейных уравнений с помощью библиотечной функции optimize.root для разных методов отыскания корней
Только один из методов, приведенных в документации [3] прошёл тестирование по результату решения модельной функции, это метод ‘krylov’.
Решение для n=100:
Solution:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1.]
Krylov method iteration = 4219
Optimize root time 7.239 seconds:
Вывод: С увеличением числа уравнений вдвое заметно появление ошибок в решении. При дальнейшем увеличении n решение становится не приемлемым, что возможно из-за автоматической адаптации к шагу, эта же причина резкого падения быстродействия. Но это только моё предположение.
Программа для тестирования на модельной функции c результатами решения системы алгебраических нелинейных уравнений с помощью программы написанной на Python 3 с учётом соотношений (1)-(8) для отыскания корней по модифицированному методу Ньютона
Решение для n=100:
Solution:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1.]
Newton iteration = 13
Newton method time 0.496 seconds
Решение для n=200:
Solution:
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1.]
Newton iteration = 14
Newton method time 1.869 seconds
Чтобы убедиться в том, что программа действительно решает систему, перепишем модельную функцию для ухода от корня со значением 1 в виде:
Получим:
Solution:
[ 0.96472166 0.87777036 0.48175823 -0.26190496 -0.63693762 0.49232062
-1.31649896 0.6865098 0.89609091 0.98509235]
Newton iteration = 16
Newton method time 0.046 seconds
Вывод: Программа работает и при изменении модельной функции.
Теперь вернёмся к начальной модельной функции и проверим более широкий диапазон для n, например в 2 и 500.
n=2
Solution:
[1. 1.]
Newton iteration = 6
Newton method time 0.048 seconds
n=500
Использование численных методов для решения уравнений
Дифференциальным уравнением первого порядка называется уравнение вида F(x,y,у’)=0 или у’=f(x,y). Функция y(x), при подстановке которой уравнение обращается в тождество, называется решением дифференциального уравнения.
Рассмотрим несколько численных методов решения дифференциальных уравнений первого порядка. Описание численных методов приводится для уравнения в виде у’=f(x,y).
Рассмотрим два варианта вывода расчетных формул
Реферат: Численные методы решения систем линейных алгебраических уравнений
Название: Численные методы решения систем линейных алгебраических уравнений Раздел: Рефераты по математике Тип: реферат Добавлен 07:31:10 24 июня 2011 Похожие работы Просмотров: 3515 Комментариев: 13 Оценило: 4 человек Средний балл: 5 Оценка: неизвестно Скачать | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
k | х1(k) | х2(k) | х3(k) |
0 | 1.0 | 2.0 | 2.0 |
1 | 1.75 | 3.375 | 3.0 |
2 | 1.84375 | 3.875 | 3.025 |
3 | 1.9625 | 3.925 | 2.9625 |
4 | 1.990625 | 3.9765625 | 3.0 |
5 | 1.99414063 | 3.9953125 | 3.0009375 |
… | … | … | … |
15 | 1.99999993 | 3.99999985 | 3.0009375 |
… | … | … | … |
19 | 2.0 | 4.0 | 3.0 |
Этот процесс называется итерацией Якоби и может использоваться для решения определенных типов линейных систем [19].
1.5 Итерация Гаусса-Зейделя
Процесс итерации Якоби иногда можно модифицировать для ускорения сходимости.
Отметим, что итеративный процесс Якоби производит три последовательности – <х1 (k) >, <х2 (k) >, <х3 (k) >, <х4 (k) >. Кажется разумным, что х1 (k+1) может быть использовано вместо х2 (k ). Аналогично х1 (k+1) и х2 (k+1) можно использовать в вычислении х3 (k+1) . Например, для уравнений из системы (1) это даст следующий вид итерационного процесса Гаусса-Зейделя, использующий (3*):
Такой итерационный процесс даст результаты:
k | х1 (k) | х2 (k) | х3 (k) |
0 | 1.0 | 2.0 | 2.0 |
1 | 1.75 | 3.75 | 2.95 |
2 | 1.95 | 3.96875 | 2.98625 |
3 | 1.995625 | 3.99609375 | 2.99903125 |
… | … | … | … |
8 | 1.99999983 | 3.99999988 | 2.99999996 |
9 | 1.99999998 | 3.99999999 | 3.0 |
10 | 2.0 | 4.0 | 3.0 |
Т. е. к точному решению мы пришли уже на 10-ом шаге итерации, а не на 19, как в итерации Якоби [19].
1. Способ итераций дает возможность получить последовательность приближенных значений, сходящихся к точному решению системы. Для этого система приводится к виду (для случая системы из четырех уравнений):
Эти формулы как раз и задают собственно итерационный процесс.
2. При этом чтобы итерационный процесс сходился к точному решению, достаточно, чтобы все коэффициенты системы были малы по сравнению с диагональными.
Это условие можно сформулировать и более точно:
Для сходимости процесса итераций достаточно, чтобы в каждом столбце сумма отношений коэффициентов системы к диагональным элементам, взятым из той же строки, была строго меньше единицы:
3. Следует так же сказать, что итерационный процесс может проводиться как в виде итерации Якоби, так и в виде итерации Гаусса-Зейделя. В последнем случае сходимость итерационного процесса может существенно улучшиться.
Глава 2. Применение численных методов для решения систем линейных алгебраических уравнений в теории и на практике
§1 ЧИСЛЕННЫЕ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Существуют два типа методов — прямые и итерационные. Мы рассматриваем прежде всего метод исключения Гаусса для систем общего вида и варианты — метод прогонки и методы матричной прогонки для систем специального вида (с трех-диагональной или блочно-трех диагональной матрицами). Это — прямые методы. Их эффективность зависит от порядка системы n структуры матрицы.
При изучении итерационных методов мы трактуем систему уравнений как операторное уравнение первого рода Au = f и излагаем общую теорию итерационных методов для операторных уравнений при минимальных предположениях относительно оператора А. Общая теория позволяет доказать сходимость итераций для метода Зейделя и метода верхней релаксации при минимальных ограничениях на оператор А. Рассмотрены два класса методов: 1) для случая, когда известны границы γi > О и γ2 >= γ1 спектра оператора А в некотором энергетическом пространстве HD ; 2) для случая, когда границы γ1 и γ2 неизвестны. Весьма эффективным является попеременно-треугольный метод.
Основная задача линейной алгебры — решение системы уравнений
Будем предполагать, что матрица А невырождена, так что уравнение Аи = 0 имеет только тривиальное решение, и система (1) имеет единственноерешение
В курсе линейной алгебры решение системы (1) обычно выражают по формулам Крамера в виде отношений определителей. Для численного решения системы (1) эти формулы непригодны, так как они требуют вычисления N +1 определителей, что требует большого числа действий (порядка N! арифметических операций). Даже при выборе наилучшего метода вычисление одного определителя требует примерно такого же времени, что и решение системы линейных уравнений современными численными методами. Кроме того, следует иметь в виду, что вычисления по формулам Крамера часто ведут к большим ошибкам округлений.
Особенность большинства численных методов для (1) состоит в отказе от нахождения обратной матрицы. Основное требование к методу решения — минимум числа арифметических действий, достаточных для отыскания приближенного решения с заданной точностью е>0 (экономичность численного метода).
Выбор того или иного численного метода зависит от многих обстоятельств — от имеющихся программ, от вида матрицы А, от типа расчета и др. Поясним слова «тип расчета». Возможны разные постановки задачи:
1) найти решение одной конкретной задачи (1);
2) найти решение нескольких вариантов задачи (1) с одной и той же матрицей А и разными правыми частями. Может оказаться, что неоптимальный для одной задачи метод является весьма эффективным для многовариантного расчета.
При многовариантном расчете можно уменьшить среднее число операций для одного варианта, если хранить некоторые величины, а не вычислять их заново для каждого варианта. Это, конечно, зависит от машины, от объема ее оперативной памяти.
При теоретических оценках качества алгоритмов их сравнение проводится по числу q ( e ) арифметических действий, достаточных для нахождения решения задачи с заданной точностью е > 0 [15].
Метод Гаусса. Имеется несколько вычислительных вариантов метода Гаусса, основанного на идее последовательного исключения. Процесс решения системы линейных алгебраических уравнений Ax = f (1) по методу Гаусса состоит из двух этапов.
Первый этап (прямой ход). Система (1) приводится к треугольному виду
Метод квадратного корня. Этот метод пригоден для систем
с эрмитовой (в действительном случае — симметричной) матрицей А. Матрица А разлагается в произведение
где S — верхняя треугольная, D — диагональная матрица. Решение уравнения Аu=fсводится к последовательному решению двух систем
Метод квадратного корня требует порядка N 2 /3 арифметических действий, т. е. при больших N он вдвое быстрее метода Гаусса и занимает вдвое меньше ячеек памяти. Это обстоятельство объясняется тем, что метод использует информацию о симметрии матрицы.
1. Метод итераций для решения системы линейных алгебраических уравнений .
Перейдем к общему описанию метода итераций для системы линейных алгебраических уравнений
Для ее решения выбирается некоторое начальное приближение у0 H и последовательно находятся приближенные решения (итерации) уравнения (1). Значение итерации yh +1 выражается через известные предыдущие итерации yk , yk -1 ,… Если при вычислении yh +1 используется только одна предыдущая итерация yh , то итерационный метод называют одношаговым (или двухслойным) методом; если же yk +1 выражается через две итерации yk и yk -1 , то метод называется двухшаговым (или трехслойным). Мы будем рассматривать в основном одношаговые методы. Будем считать, что А: H -> H — линейный оператор в конечномерном пространстве H со скалярным произведением (•, •).
Важную роль играет запись итерационных методов в единой (канонической) форме. Любой двухслойный итерационный метод можно записать в следующей канонической форме:
(7), где А: Н -> Н — оператор исходного уравнения (1), В: Н -> Н — линейный оператор, имеющий обратный В -1 , k — номер итерации, τ1 τ2 , . τk +1 , . — итерационные параметры, τk +1 > 0. Оператор В может, вообще говоря, зависеть от номера k — для Для простоты изложения мы предполагаем всюду, что В не зависит от k .
Если В = Е — единичный оператор, то метод(8) называют явным: yh +1 находится по явной формуле
В общем случае, при В≠ Е, метод (7) называют неявным итерационным методом: для определения yh +1 надо решить уравнение:
(9)
Естественно требовать, чтобы объем вычислений для решения .системы Byk +1 = Fk был меньше, чем объем вычислений для прямого решения системы Au=f
Точность итерационного метода (7) характеризуется величиной погрешности zh = ук — и, т. е. разностью между решением уравнения (7) и точным решением и исходной системы линейных алгебраических уравнений. Подстановка yk = zk + u в (2) приводит к однородному уравнению для погрешности:
§2 ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
2.1 Общие сведения
К численным методам линейной алгебры относятся численные методы решения систем линейных алгебраических уравнений. Методы решения СЛАУ разбиваются на две группы. К первой группе принадлежат так называемые точные или прямые методы — алгоритм, позволяющий получить решение системы за конечное число арифметических действий. Вторую группу составляют приближенные методы, в частности итерационные методы решения СЛАУ.
2.2.1 Описание метода
Рассмотрим СЛАУ вида
Ax = B, где А — матрица. (1)
Если эту систему удалось привести к виду x = Cx + D, то можно построить итерационную процедуру
xk → x*, где х* — решение заданной системы.
В конечном варианте система будет имееть вид:
Условием сходимости для матрицы С выполняется, если сумма модулей коэффициентов меньше единицы по строкам или по столбцам, т.е.
, или .
Необходимо, чтобы диагональные элементы матрицы А были ненулевыми.
Для преобразования системы можно выполнить следующие операции:
В результате получим систему:
В ней на главной диагонали матрицы С находятся нулевые элементы, остальные элементы выражаются по формулам:
Итерационный процесс продолжается до тех пор, пока значения х1 ( k ), х2 ( k ), х3 ( k ) не станут близкими с заданной погрешностью к значениям х1 ( k -1), х2 ( k -1), х3 ( k -1).
2.2.2 Решение СЛАУ методом простых итераций
Решить СЛАУ методом простых итераций с точностью .
Для удобства преобразуем систему к виду:
,
Принимаем приближение на 0-ом шаге:
,
,
На 1-м шаге выполняем следующее:
Подставляем принятые приближения в первоначальную систему уравнений
Смотрим не выполняется ли условие остановки итерационного процесса:
:
На 2-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса
:
На 3-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса
:
На 4-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса
:
На 5-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса:
:
На 6-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса:
:
Необходимая точность достигнута на 6-й итерации. Таким образом, итерационный процесс можно прекратить [14].
2.3 Метод Зейделя
2.3.1 Описание метода
В этом методе результаты, полученные на k-том шаге, используются на этом же шаге. На (k+1) — й итерации компоненты приближения вычисляются по формулам:
Этот метод применим к система уравнений в виде Ax=B при условии, что диагональный элемент матрицы коэффициентов A по модулю должен быть больше, чем сумма модулей остальных элементов соответствующей строки (столбца).
Если данное условие выполнено, необходимо проследить, чтобы система была приведена к виду, удовлетворяющему решению методом простой итерации и выполнялось необходимое условие сходимости метода итераций:
, либо
2.3.2 Решение СЛАУ методом Зейделя
Решить СЛАУ методом Зейделя с точностью .
Эту систему можно записать в виде:
В этой системе сразу видно, что выполняется условие, где диагональные элементы матрицы коэффициентов по модулю больше, чем сумма модулей остальных элементов соответствующей строки.
Для удобства преобразуем систему к виду:
,
Принимаем приближение на 0-ом шаге:
На 1-м шаге выполняем следующее:
Подставляем принятые приближения в первоначальную систему уравнений
Смотрим не выполняется ли условие остановки итерационного процесса
:
На 2-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса
:
На 3-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса:
:
На 4-м шаге выполняем следующее:
Смотрим не выполняется ли условие остановки итерационного процесса
:
Необходимая точность достигнута на 4-й итерации. Таким образом, итерационный процесс можно прекратить [9].
2.4 Сравнительный анализ
Можно заметить, что в методе Зейделя быстрее мы достигаемой нужной точности, в нашем случае в точность была достигнута на 4-й итерации, когда в методе простых итераций она была достигнута на 6-й итерации. Но в то же время в методе Зейделя ставится больше условий. Поэтому вначале нужно произвести иногда довольно трудоемкие преобразования. В таблице 4.1 приведены результаты решения СЛАУ методом простой итерации и методом Зейделя на различных шагах итерации:
http://toehelp.ru/theory/informat/lecture13.html
http://www.bestreferat.ru/referat-238943.html