Лабы / 2
.doc
Численные методы и оптимизация.
Лабораторная работа №2 по теме:
«Методы решения нелинейных уравнений»
Студент: Востропятов Н. А.
Группа: УИ0301
Вариант: №9
Условие.
![]()
Отделение корней.


Из графика видно, что корень находится
в интервале [1;2]
.
Решение методом итераций.
Приведём данное уравнение к виду
:
- рекуррентное уравнение.
Найдём
:
.
Проверим на сходимость (
):

Выбираем произвольное начальное
приближение:
.
Для оценки абсолютной погрешности:
.
Условие окончания процесса уточнения
корня:
.
Вычислим 3 первые итерации:
|
n |
xn |
f(x) |
|
0 |
1 |
-1 |
|
1 |
1.11893 |
-0.07504 |
|
2 |
1.12918 |
0.00237 |
|
3 |
1.12886 |
-0.0000724 |
Оценим погрешность:
.
Результаты выполнения программы:
|
E |
n |
x |
f(x) |
|
0.01 |
2 |
1.13315 |
0.03225 |
|
0.001 |
3 |
1.12873 |
0.01010 |
|
0.0001 |
4 |
1.12887 |
0.00003 |
|
n |
2 |
3 |
4 |
|
lg(E) |
-2 |
-3 |
-4 |
Решение методом касательных (Ньютона).
![]()
Найдём
и
:
![]()
Проверим на сходимость (
):
- выполняется.
Выберем начальное приближение (
):
.
Для оценки абсолютной погрешности:
.
Рекуррентное уравнение (
):
Вычислим 3 первые итерации:
|
n |
xn |
f(x) |
|
0 |
1 |
-1 |
|
1 |
1.125 |
-0.02916 |
|
2 |
1.12910 |
0.001766 |
|
3 |
1.12885 |
-0.0001774 |
Оценим погрешность:
.
Результаты выполнения программы:
|
E |
n |
x |
f(x) |
|
0.01 |
1 |
1.125 |
-0.02916 |
|
0.001 |
2 |
1.12910 |
0.00180 |
|
0.0001 |
3 |
1.12885 |
-0.00012 |
|
n |
1 |
2 |
3 |
|
lg(E) |
-2 |
-3 |
-4 |
Корень, найденный с помощью математического пакета Mathcad 11 – x=1.1288656118.
Программа на ПК.
Вырезка из модуля для программы, содержащего процедуры нахождения приближённого корня (язык программирования - Паскаль):
Метод итераций:
procedure iter(a,b,E:real;var res:real;var it:integer);
var t:real;
begin
it:=0;
res:=b;t:=a;
if f(a)*f(b)=0 then
begin
if f(a)=0 then res:=a else if f(b)=0 then res:=b
end
else
while (abs(res-t)>E)and(abs(f(res)-fi(res))>E) do
begin
res:=t;
t:=fi(res);
inc(it);
writeln('n=',it,' x=',res:0:5,' f(x)=',f(res):0:5);
end;
end;
Метод касательных (Ньютона:)
procedure touch(a,b,m,E:real;var res:real;var it:integer);
begin
it:=0;
if f(a)*f(b)=0 then
begin
if f(a)=0 then res:=a else if f(b)=0 then res:=b
end
else
if (f(a)*f(b)>0)or(diffI(a)*diffI(b)<=0)or(diffII(a)*diffII(b)<=0)
then it:=-1
else
begin
if diffII(a)*f(a)>0 then res:=a else res:=b;
while (abs(f(res)/diffI(res))>E)and(abs(f(res))/m>E) do
begin
res:=res-f(res)/diffI(res);
inc(it);
writeln('n=',it,' x=',res:0:5,' f(x)=',f(res):0:5);
end;
end;
end;
