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

Лабораторная работа № 1

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


Реализация и исследование метода секущих.
Выполнил студент: Мосоян Гор
Группа: 3631503/90003
Преподаватель: Ануфриев И.Е.

1. Постановка задачи и описание алгоритма

¿
Требуется решить уравнение вида 𝑓(𝑥)=0, 𝑓: ℝ→ℝ с некоторой точностью ε (¿ x n−x ∨¿<𝜀),
¿
где x −корень, x n−приближённое решение.

Достаточные условия для метода секущих:


Совпадают с условиями для метода Ньютона:

1. f ( x ) ∈C (2) на[a , b]
2. Существует промежуток [a , b], на концах которого функция принимает
значения противоположных знаков: f ( a )∗f ( b ) <0
3. f ' ( x )знако-постоянна на [a , b]
4. f ' ' ( x )знако-постоянна на [a , b]
''
5. На начальном приближении x 0 : f ( x 0 )∗f ( x 0 ) >0 (условие для монотонной
сходимости)
Алгоритм метода:

Метод секущих получается из метода Ньютона заменой f ' (x k ) разностным


приближением:

'
f ( x k )−f ( x k−1 )
f ( xk ) ≈
x k −x k−1
Тогда для итерационного процесса получаем формулу:
x k −x k−1
x k+1=x k −f ( xk )
f ( x k ) −f ( x k−1)

Заметим, что метод является двухшаговым, т.е. для нового приближения требуются два
предыдущих и их значения. Соответственно, для начала метода требуется два
приближения x 0 , x 1. Причем, для монотонной сходимости метода требуется, чтобы для
этих точек выполнялось условие 5. из достаточных условий.
Скорость сходимости метода секущих меньше (1,618…), чем для метода Ньютона (2).
Однако, метод оказывается полезным, когда вычисление производной функции на каждой
итерации в методе Ньютона является трудоемким.

2. Реализация и исследование метода


Будем искать корни функции f ( x )=( x−2 )( x−6 )( x−9 )=x 3−17 x 2 +84 x−108

Исследование функции и отделение корней:


Дан полином 3-й степени. Из его начального построения, все его корни вещественные.
Для другой функции: трансцендентной или произвольного полинома, это в общем случае
не так. Требуется дополнительное исследование: графическое, применение теорем о
границах корней.
Отделим промежутки с корнями полинома с помощью графического метода. Также
построим графики первой и второй производной. Это понадобиться для дальнейшего
исследования условий сходимости метода.

Видим на графике три пересечения f (x) с осью абсцисс (корни). Будем искать корень
¿
x =9.
Реализация метода:
%% начальное приближение
x_0 = 9.5
x_1 = 10

xr = 9 % точное значение корня

%%Secant method
x0 = x_0
x1 = x_1
y0 = f(x0)
y1 = f(x1)
N = 100
X_ERR = 1:1:N;
ERR = zeros(1, N);

for i = 1:N
if (y0 == 0)
x2 = x0
ERR(i) = abs(x2 - xr);
break
elseif (y1 == 0)
x2 = x1
ERR(i) = abs(x2 - xr);
break
end
x2 = x1 - y1*((x1 - x0)/(y1 - y0));
x0 = x1;
y0 = y1;
x1 = x2;
y1 = f(x1);
ERR(i) = abs(x2 - xr);

end
x2

Убедимся в том, что выполнены достаточные условия и условия для монотонной


сходимости. f ( x) гладкая и дважды дифференцируемая на R. f ' ( x ) и f ' ' (x)
¿
знакопостоянны, по крайней мере, в окрестности корня x =9с радиусом 1. Для выбранных
начальных приближений x 0=9.5 , x 1=10 выполнено условие для монотонной сходимости
'' ''
метода: f ( x 0 )∗f ( x 0 ) >0 , f ( x 1 )∗f ( x 1 ) >0. В этом можно убедиться с помощью
вышеприведенных графиков функции и ее производных либо аналитическом способом.
Приведем график сходимости для такого алгоритма.

Наблюдается очень высокая скорость сходимости (похожая на квадратичную). К 7-й


итерации был получен корень x =9 с точностью до машинного нуля (ε =10−15 ).

3. Примеры нарушения достаточных условий.


Для примера из пункта 2 возьмем начальные приближения: x 0=6.5 , x 1=10 для искомого
¿
корня x =9 . Для такого приближения нарушаются условия знакопостоянства
производных. Посмотрим к чему это приведет:

x2 = 6
Нарушение достаточных условий привело к сходимости метода к другому корню
уравнения.

¿
Теперь все для того же корня x =9 возьмем близкие к предыдущим начальные
приближения x 0=6.7 , x 1=10. Для такого начального приближения также нарушается
условие знакопостоянства f ' (x) на исследуемом промежутке. Можно убедиться в этом,
посмотрев на вышеприведенные графики функции и ее производных.
Посмотрим на сходимость метода при таких условиях:
x2 = 9
Из графика видно, что метод сошелся, и даже к искомому корню. Однако характер
сходимости немонотонный: на начальных итерациях наблюдается уменьшение точности.
Это связано с тем, что на выбранном интервале f ' ( x) не знакопостоянна и после этого
скачка метод мог начать сходиться к другому корню, как это наблюдалось в предыдущем
примере.

4. Исследование функции fzero


Функция z = fzero(‘<имя функции>‘, x0) находит нуль функции в окрестности точки x0.
Функция z = fzero(‘<имя функции>‘, x0, tol) возвращает результат с относительной
погрешностью tol, задаваемой пользователем.
Функция z = fzero(‘<имя функции>‘, x0, tol, trace) позволяет выдавать на экран терминала
промежуточные результаты поиска нуля функции.
Алгоритм:
Функция fzero использует методы деления отрезка пополам, секущей и обратной
квадратической интерполяции. Основные способы обращения к fzero, при обращении к
fzero возможно указать:

 либо начальное приближение к корню;


 либо отрезок, на котором исследуемая функция принимает значения разных
знаков
Если функция не является непрерывной, то fzero может вместо нулей возвращать
значения, которые являются разрывными точками. Например, fzero(@tan, 1) возвращает
1.5708, что является точкой разрыва для тангенса.
Об обратной квадратичной интерполяции:
Алгоритм обратной квадратичной интерполяции определяется рекуррентным
соотношением
f n−1 f n f n−2 f n f n−2 f n−1
x n+1= x n−2+ x n−1+ x (1),
( f n−2−f n−1 )(f n −2 −f n ) (f n−1 −f n−2 )(f n−1 −f n ) (f n−f n−2)( f n−f n−1) n
получающимся из интерполяционной функции Лагранжа:

−1 ( y−f n−1 ) ( y−f n ) ( y−f ¿¿ n−2)( y−f n )


f ( y )= x n−2+ x n−1+¿ ¿ ¿ ,
( f n−2−f n−1 ) ( f n−2−f n ) ( f n−1−f n−2 ) ( f n−1 −f n )
При y=0 получаем ( 1 ) .

Примеры использования fzero на промежутках из предыдущих пунктов для нашей


функции f ( x )=( x−2 )( x−6 )( x−9 )=x 3−17 x 2 +84 x−108 :

fzero(f,10)
ans = 9

fzero(f,[6.1 10])
ans = 9

fzero(f,[7 10])
ans = 9

Примеры использования параметра options для fzero:

options1 = optimset('TolX',10^-3);
fzero(f, 10, options1)
ans =

9.003295842815445

options2 = optimset('Display','iter');
fzero(f, 10, options2)

Search for an interval around 10 containing a sign change:


Func-count a f(a) b f(b) Procedure
1 10 32 10 32 initial interval
3 9.71716 20.5723 10.2828 45.5077 search
5 9.6 16.416 10.4 51.744 search
7 9.43431 11.0888 10.5657 61.2312 search
9 9.2 4.608 10.8 76.032 search
10 8.86863 -2.58847 10.8 76.032 search

Search for a zero in the interval [8.86863, 10.8]:


Func-count x f(x) Procedure
10 8.86863 -2.58847 initial
11 8.93222 -1.37781 interpolation
12 9.0033 0.0693214 interpolation
13 8.99989 -0.00228933 interpolation
14 9 -3.58886e-06 interpolation
15 9 5.22249e-13 interpolation
16 9 0 interpolation

Zero found in the interval [8.86863, 10.8]


ans =

Из данного примера виден алгоритм работы функции fzero. Сначала идет поиск
промежутка, на котором функция меняет знак. Затем с помощью метода обратной
квадратичной интерполяции осуществляется поиск значения корня.

5. Исследование функции roots


r =roots( p) - возвращает вектор-строку, содержащую корни (в том числе и комплексные)
полинома « p».
n n−1
Если P ( x ) =an x + an−1 x +…+a 1 x +a0 , то вектор строка для работы с функцией “roots”
записывается:
p=[an an−1 … a1 a0 ]
Алгоритм:
Алгоритм включает в себя вычисление собственных чисел сопровождающей матрицы
полинома.
n n−1
Сопровождающая матрица полинома P ( x ) =x +c n−1 x +…+ c 1 x+ c 0имеет вид:
0 0 ⋯ 0 −c 0
1 0 … 0 −c 1
0 1 ⋯ 0 −c 2
⋮ ⋮ ⋱ ⋮ ⋮
0 0 … 1 −c n−1
Полином является характеристическим уравнением своей сопровождающей матрицы.
Тогда собственные числа будут являться корнями этого полинома.
Пример использования roots для нашей функции
f ( x )=( x−2 )( x−6 )( x−9 )=x 3−17 x 2 +84 x−108 :

p = [1 -17 84 -108]
roots(p)
ans =
9.000000000000004
5.999999999999980
2.000000000000001
Из документации MatLab: «Приведенными результатами являются точные собственные
значения матрицы в ошибке округления сопровождающей матрицы, A. Однако это не
означает, что они - точные корни полинома, коэффициенты которого в ошибке округления
тех в p».

Пример Уилкинсона:
20 19
Рассмотрим многочлен: P20 ( x )= ( x −1 )( x−2 ) … ( x−20 ) =x −210 x +…+20 !

Он имеет 20 хорошо отделимых корней. Однако при ошибке порядка машинного нуля в
коэффициенте при x 19: −( 210+2−23 ) ≈−(210+ 10−7 ), полученный полином будет иметь
качественно другие корни:

Половина из них перестали быть вещественными.

Маленькое исследование на устойчивость для нашего


полинома:
3 2
P3=( x−2 )( x−6 )( x−9 )=x −17 x + 84 x−108

r_t = [9 6 2] %%точные корни полинома


p = [1 -17 84 -108] %%коэффициенты полинома

%%вносим ошибку в коэффициенты полинома


p_err = p;
for i = 1:4
p_err(i) = p(i)+10^-3
end

r_p_err = roots(p_err) %%ищем корни полинома с ошибками

%%вычисляем разность точных и найденных корней


accuracy = zeros(3, 1)
for i = 1:3
accuracy(i)=abs(r_p_err(i) - r_t(i))
end

Результаты:
r_p_err =
8.960708262972233
6.021844995846221
1.999464723199543

accuracy =
0.039291737027767
0.021844995846221
0.000535276800457
Ошибка вычисленных корней того же порядка, что и внесенные возмущения, корни
качественно не поменялись (остались вещественными). Можно сделать вывод, что
полином устойчив к возмущениям.

Вам также может понравиться