Вы находитесь на странице: 1из 8

Санкт-Петербургский политехнический университет Петра Великого

Институт прикладной математики и механики


Кафедра прикладной математики

Л АБ О РАТ О РН АЯ РАБ О Т А №1

Решение алгебраических и трансцендентных уравнений


По дисциплине «Реализация численных методов»

Выполнила
студент гр. 23631/1 ____________ А.Г. Митрофанова

Руководитель
Доцент, к.ф.-м.н. ____________ И.Е. Ануфриев

Санкт-Петербург
2017 год
Оглавление
1.Формулировка задачи .....................................................................................................3
2. Алгоритм метода и условия его применимости .........................................................3
2.1. Метод половинного деления .................................................................................3
2.2. Метод простых итераций .......................................................................................3
3. Тестовые примеры .........................................................................................................4
3.1. Уравнение 1: ............................................................................................................4
3.2. Уравнение 2: ............................................................................................................6
4. Работа методов при нарушении условий сходимости ...............................................6
4.1. Метод простых итераций. ......................................................................................6
4.2. Метод половинного деления. ................................................................................7
5. Заключение .....................................................................................................................8
Решение алгебраических и трансцендентных уравнений
1.Формулировка задачи
Написать функцию, реализующую методы половинного деления и простых
итераций решения алгебраических и трансцендентных уравнений. Исследовать работу
методов на различных тестовых примерах. Сравнить полученные результаты с
результатами функции fzero пакета MatLab. Сравнить методы между собой.

2. Алгоритм метода и условия его применимости


2.1. Метод половинного деления
Теорема (Больцано-Коши): Пусть функция f(x) определена и непрерывна при всех x
ϵ [a, b] и на [a, b] меняет знак, т.е. f(a)* f(b) <0. Тогда на интервале (a, b) она хотя бы один
раз обращается в нуль, т.е. Ǝ с ϵ (a, b), f(с)=0.
Самый простой выбор пробной точки – деление промежутка существования корня
[a, b] пополам. Вычисление f(с) может привести к трём взаимоисключающим ситуациям:
а) f(a)* f(с) < 0 => корень находится на интервале (a, с);
б) f(с)* f(b) < 0 => корень находится на интервале (с, b);
в) f(с) = 0 => точка с является искомым корнем
Тогда процедуру сужения промежутка можно применить к промежуткам а) и б) и
далее повторно циклически, пока не придём к в). Таким образом, алгоритм можно записать
так:
Шаг 0. Задать концы отрезка a и b, функцию f и малое число 𝜀 > 0 (допустимую
погрешность корня).
𝑎+𝑏
Шаг 1. Вычислить 𝑐 = 2 .
Шаг 2. Если b – a < 2* 𝜀 , то с – корень.
Шаг 3. Вычислить f(с).
Шаг 4. Если f(с) = 0, то с – корень.
Шаг 5. Если f(a)* f(с) <0, то b = c, иначе a = c. Вернуться к шагу 1.
Очевидно, что метод применим, только тогда, когда функция на концах отрезка
принимает разные знаки и на этом отрезке только один корень.
Данный метод обладает линейной сходимостью.
Для полинома нам понадобится следующая теорема:
Теорема о верхней границе: Пусть 𝑃(𝑥) = 𝑎0 𝑥 𝑛 + 𝑎1 𝑥 𝑛−1 + ⋯ + 𝑎𝑛−1 𝑥 + 𝑎𝑛 (𝑎0 >0).
𝑚 |𝑎′ |
Тогда любой положительный корень 𝑥∗ ≤ 1 + √ , где m – номер первого отрицательного
𝑎0

коэффициента в ряду 𝑎1 , 𝑎2 ,…, 𝑎𝑛 , а 𝑎′ - наибольший по модулю отрицательный


коэффициент.
Эта теорема позволяет найти нижнюю границу положительных корней, а также
1
верхнюю и нижнюю границы отрицательных корней. если произвести замены 𝑥 = , 𝑥 =
𝑦
1
−𝑦, 𝑥 = − 𝑦.

2.2. Метод простых итераций


Пусть дана функция f(x)=0, где 𝑥 ∈ [𝑎, 𝑏], 𝑓 ∈ 𝐶([𝑎, 𝑏]), 𝑓(𝑎) ∗ 𝑓(𝑏) < 0 . Это
уравнение заменяется эквивалентным x=φ(x), 𝜑 ∈ 𝐶([𝑎, 𝑏]). Итерации образуются по
правилу xn+1= φ(xn), n=0, 1, 2, … Причём задаётся начальное приближение x0.
Теорема:
Пусть
1. 𝜑 ∈ С(1) ([𝑎, 𝑏]).
2. ∀𝑥 ∈ [𝑎, 𝑏] |𝜑 ′ (𝑥)| ≤ 𝑞 < 1.
𝑏−𝑎 𝑏−𝑎
3. 𝑥 ∗ ∈ [𝛼, 𝛽]ϲ[𝑎, 𝑏], где 𝛼 = 𝑎 + 3 и 𝛽 = 𝑏 − 3 .
4. 𝑥0 ∈ [𝛼, 𝛽]ϲ[𝑎, 𝑏].
Тогда
1. Корень 𝑥 ∗ является пределом последовательности 𝑥𝑘 = 𝜑(𝑥𝑘−1 ).
𝑞
2. Справедлива оценка |𝑥 ∗ − 𝑥𝑘 | ≤ 1−𝑞 |𝑥𝑘 − 𝑥𝑘−1 |

Тогда можно получить условие остановки итерационного цикла:


1−𝑞
|𝑥𝑘 − 𝑥𝑘−1 | ≤ 𝜀
𝑞
Для сходимости этого метода большое значение имеет выбор φ(x). Эту функцию
можно задать различными способами. Опишем общий подход:
𝑓(𝑥) = 0 ⇔ 𝑥 = 𝑥 − 𝜆 ∗ 𝑓(𝑥), 𝜆 ≠ 0, 𝜑(𝑥) = 𝑥 − 𝜆 ∗ 𝑓(𝑥)
|𝜑 ′ (𝑥)| ≤ 𝑞 < 1 ⇒ −1 < 1 − 𝜆 ∗ 𝑓′(𝑥) < 1 ⇒ 0 < 𝜆 ∗ 𝑓′(𝑥) < 2
2
Так как, 𝑓′(𝑥) – знакопостоянная функция, то 𝑠𝑖𝑔𝑛(𝜆) = 𝑠𝑖𝑔𝑛(𝑓′(𝑥). Тогда |𝜆| < ,
𝑀
где М - max |𝑓′(𝑥)|.
𝑥∈[𝑎,𝑏]
Найдём теперь q. |𝜑 ′ (𝑥)| ≤ 𝑞 < 1 ⇒ |1 − 𝜆 ∗ 𝑓 ′ (𝑥)| ≤ 𝑞 < 1 ⇒
𝑞 = max |1 − 𝜆 ∗ 𝑓 ′ (𝑥)| < 1.
𝑥∈[𝑎,𝑏]
Данный метод обладает линейной сходимостью.

3. Тестовые примеры
3.1. Уравнение 1:
f(x)=(x+2)*(x-1)*(x-3)*(x-5)
Найдём аналитически промежутки для его корней с помощью теоремы о верхней
границе. Раскроем скобки: 𝑓(𝑥) = 𝑥 4 − 7 ∗ 𝑥 3 + 5 ∗ 𝑥 2 + 31 ∗ 𝑥 − 30.
1) 𝑓(𝑥) = 𝑥 4 − 7 ∗ 𝑥 3 + 5 ∗ 𝑥 2 + 31 ∗ 𝑥 − 30
1 30
m = 1, a’ = -30, a0 = 1 𝑥 ∗ ≤ 1 + √ 1 = 31 – верхняя граница положительных
корней
1 1 4 1 3 1 2 1
2) 𝑓 (𝑦) = (𝑦) − 7 ∗ (𝑦) + 5 ∗ (𝑦) + 31 ∗ (𝑦) − 30 =
1 4
= − ( ) ∗ (30 ∗ 𝑦 4 − 31 ∗ 𝑦 3 − 5 ∗ 𝑦 2 + 7 ∗ 𝑦 − 1)
𝑦
1 31 1
m = 1, a’ = -31, a0 = 30 𝑦 ∗ ≤ 1 + √30 ≈ 2 => 𝑥 ∗ ≥ 2 – нижняя граница
положительных корней
3) 𝑓(−𝑦) = 𝑦 4 + 7 ∗ 𝑦 3 + 5 ∗ 𝑦 2 − 31 ∗ 𝑦 − 30
3 31
m = 3, a’ = -31, a0 = 1 𝑦 ∗ ≤ 1 + √ ≈ 4 => 𝑥 ∗ ≥ −4 – верхняя граница
1
отрицательных корней
1 1 4 1 3 1 2 1
4) 𝑓 (− 𝑦) = (𝑦) + 7 ∗ (𝑦) + 5 ∗ (𝑦) − 31 ∗ (𝑦) − 30 =
1 4
= (− ) ∗ (30 ∗ 𝑦 4 + 31 ∗ 𝑦 3 − 5 ∗ 𝑦 2 − 7 ∗ 𝑦 − 1)
𝑦
2 7 2
m = 2, a’ = -7, a0 = 30 𝑦 ∗ ≤ 1 + √30 ≈ 1,5 => 𝑥 ∗ ≤ − 3 – нижняя граница
отрицательных корней
2 1
Таким образом, корни могут находиться в интервалах (−4; − 3) и (2 ; 31).
Построим график функции на промежутке (-4; 31). В результате построения
интервал пришлось уменьшить до (-2,5; 5,5).

Мы видим 4 корня на промежутках [-2,5; -1], [0; 2], [2,5; 4], [4; 5,5]. На каждом из
промежутков, на их концах функция принимает значения разных знаков. Из графика мы
видим, что функция непрерывна. Выполнены все условия теоремы Больцано-Коши.
Для демонстрации метода возьмём отрезок [4; 5,5].
Выполним метод половинного деления. Точность 𝜀 = 2.2 ∗ 10−16 . Метод выполнил
50 итераций. Найденный корень 𝑥 ∗ = 5.0. Сходимость линейная, как и ожидалось.
Выполним метод простых итераций. Функция удовлетворяет условиям теоремы.
Поэтому можно применить этот метод. Точность тоже 𝜀 = 2.2 ∗ 10−16. Использовались
числа 𝜆 ≈ 0.017 и 𝑞 ≈ 0.9805, вычисленные в соответствии с теоремой. Начальное
приближение 𝑥0 = 4.75. Метод выполнил 11 итераций. Найденный корень 𝑥 ∗ = 5.0.
Сходимость линейная, как и ожидалось.
Ниже на одном графике представлены сходимости обоих методов. Метод простых
итераций сходится быстрее, чем метод половинного деления.
3.2. Уравнение 2:
𝑓(𝑥) = 𝑥 2 − 𝑒 −𝑥
Уточнять корень этой функции будем на промежутке [0.5; 1].
Построим график функции на этом промежутке.

Выполним метод половинного деления. Точность 𝜀 =10-10. Метод выполнил 32


итерации. Найденный корень 𝑥 ∗ = 0.7034674225142226. Сходимость линейная, как и
ожидалось.
Выполним метод простых итераций. Функция удовлетворяет условиям теоремы.
Поэтому можно применить этот метод. Точность 𝜀 =10-10. Использовались числа 𝜆 ≈ 0.743
и 𝑞 ≈ 0.89, вычисленные в соответствии с теоремой. Начальное приближение 𝑥0 = 0.75.
Метод выполнил 26 итераций. Найденный корень 𝑥 ∗ = 0.7034674224963150. Сходимость
линейная, как и ожидалось.
Ниже на одном графике представлены сходимости обоих методов. Метод простых
итераций сходится быстрее.

4. Работа методов при нарушении условий сходимости


4.1. Метод половинного деления.
1) f(a)* f(b) ≥ 0
a. f(a)*f(b) ≠ 0
В данном случае метод вообще не будет выполняться, потому что
перед началом цикла поставлена проверка на то, что функция на
концах отрезка принимает разные знаки.
Если данную проверку убрать, и выполнить метод для полинома
f(x)=(x+2)*(x-1)*(x-3)*(x-5), на отрезке [-1.5; 0.5], на котором он
корень не содержит, с точностью 𝜀 = 2.2 ∗ 10−16 . Метод находит
корень 𝑥 ∗ =0.4999999999999997, который в действительности не
является корнем полинома.
Если выполнить метод для функции, на отрезке, на концах которых
функция принимает значения одинаковых знаков, но корень содержит,
то в зависимости от выбора отрезка, метод может дать и правильные,
и неправильные корни.
b. f(a)*f(b) = 0
Тут также стоит проверка на то, чтобы функция на концах отрезков
принимала ненулевые значения разных знаков.
Если данную проверку убрать, то происходит следующее:
Если на отрезке [a, b] f(a)=0, метод выводит корень 𝑥 ∗ = 𝑏, что не
соответствует действительности. Если же на отрезке [a, b] f(b)=0, то
метод тоже выводит 𝑥 ∗ = 𝑏, но это уже правильно.
2) f имеет несколько корней на выбранном отрезке
Возьмём тот же самый полином f(x)=(x+2)*(x-1)*(x-3)*(x-5). Выполним
метод на отрезке [0; 6]. На концах этого отрезка функция принимает значения
разных знаков и содержит три корня 𝑥1∗ = 1, 𝑥2∗ = 3 и 𝑥3∗ = 5. Точность 𝜀 =
2.2 ∗ 10−16. Метод находит только корень 𝑥2∗ = 3, причём за одну итерацию.
Если взять отрезок [0.5; 6], то метод находит корень 𝑥3∗ = 5. А если взять
отрезок [0; 5.5], то метод находит корень 𝑥1∗ = 1.
3) f – разрывна
1
Функция 𝑓(𝑥) = 𝑥−2 имеет разрыв точке 𝑥 = 2. На различных отрезках,
содержащих только разрыв, метод выдаёт точку разрыва. отрезке [1; 2] 𝑥 ∗ =
2.
sin(𝑥)
Функция 𝑓(𝑥) = 𝑥 имеет разрыв в точке 𝑥 = 0. Корни 𝑥 ∗ = 𝜋𝑛, 𝑛 ≠ 0, 𝑛 ∈
ℤ. На отрезке [-1; 2], содержащем только разрыв, метод даёт 𝑥 ∗ = 2. На
отрезке[-1; 4], содержащем и корень, и разрыв, метод зацикливается.
4.2. Метод простых итераций.
1) ∀𝑥 ∈ [𝑎, 𝑏] |𝜑 ′ (𝑥)| > 1
Возьмём уравнение 𝑓(𝑥) = 𝑥 3 − 𝑥 + 1 на отрезке [-1, 2]. Приведём его к виду
𝑥 = 𝑥 3 + 1 ⇒ 𝜑(𝑥) = 𝑥 3 + 1. На отрезке [-1, 2] 𝜑 ′ (𝑥) > 1. Если взять 𝑥0 =
−1, метод расходится.
2) 𝑓(𝑎) ∗ 𝑓(𝑏) > 0
В данном случае метод вообще не будет выполняться, потому что перед
началом цикла поставлена проверка на то, что функция на концах отрезка
принимает разные знаки.
Если убрать эту проверку, то на различных отрезках методы либо сходятся,
либо расходятся.
3) Выбор неподходящей точки 𝑥0 .
Если в примере 𝑓(𝑥) = 𝑥 2 − 𝑒 −𝑥 взять 𝑥0 = 3. То есть, достаточно далеко от
отрезка, где мы работаем, метод расходится. А при 𝑥0 = 2, метод сходится к
искомому корню на промежутке.
4) Функция содержит несколько корней на промежутке.
На различных примерах метод расходится.

5. Заключение
Методы половинного деления и простых итераций используются для решения
алгебраических и трансцендентных уравнений. Они позволяют находить корни с заданной
точностью 𝜀, если выполнены все условия сходимости. В некоторых случаях, при
нарушении условий метод может находить верный корень. Оба метода обладают линейной
скоростью сходимости. Для выбранных примеров: для алгебраического уравнения метод
простых итераций сходится быстрее, чем метод половинного деления; для
трансцендентного скорость сходимости примерно одинакова.

Оценить