-
Метод касательных (Ньютона).
Тема: Решение нелинейного уравнения методом касательных (Ньютона).
Постановка
задачи:
Найти корень нелинейного уравнения
методом
касательных с точностью
.
Краткая
теория:
Дано нелинейное уравнение F(x)
=0,
где функция у
= F(x)
определена и непрерывно-дифференцируема
для всех
,
причем функция меняет знак на концах
этого отрезка т.е. F(a)
·
F(b)
<
0.
Приближенное решение ξ ; и погрешность приближения Δξ; находятся по следующей схеме:
если
F(b)
·
F"(x)
> 0 на [a,b],
то
;
если
F(a)
·
F"(x)
> 0 на [a,b],
то
;
,
.
Приближенное решение ξ, и погрешность приближения Δξ:
,
.
Блок-схемы:
Отделение корней Метод касательных

Текст программы:
Program Metod_Kasateln;
Const Eps=0.0001; H=0.25;
Var alfa,beta,X,dX, x1,x2,y1,y2:Real; k:integer;
Function F(xf:Real):Real;
Begin
F:=Cos(xf-1)-Sqr(xf)/3
End;
Function dF(Xf:Real):Real;
Begin
dF:=-Sin(xf-1)-2/3*xf
End;
Function d2F(x1,x2:Real):Real;
Function ddF(xf:Real):Real;
Begin
ddF:=-Cos(xf-1)-2/3
End;
Var s:Real;
Begin
S:=0;
While x1<=x2 do
Begin
S:=S+ddF(x1);
x1:=x1+H/2;
End;
d2F:=S;
End;
Procedure M_Kas(a,b:Real; Var Xn,dX1:Real;var k:integer);
Var Xn1:Real;
Begin
If F(a)*d2F(a,b)>0
Then Xn:=a
Else Xn:=b;
dX1:=1;
While Abs(dx1)>EPS do
Begin
Xn1:=Xn;
Xn:=Xn1-F(Xn1)/dF(Xn1);
dX1:=Xn1-Xn; inc(k);
End;
End;
Begin {Отделение корней}
Write('Введите промежуток : '); ReadLn(Alfa,Beta);
x1:=alfa;
x2:=x1+H;
y1:=F(x1);
While x2<=beta do
Begin
y2:=F(x2);
If y1*y2<=0
Then
Begin
WriteLn('Корень определен на промежутке ( ',x1:0:2,' ; ',x2:0:2,' )');
M_Kas(x1,x2,X,dX,k);
WriteLn('X = ',X:10:8,' +- ',dX:10:8); WriteLn(‘Количество итерации=’,k);
End;
If y1*y2=0
Then
Begin
x2:=x2+H; y2:=F(x2);
End;
x1:=x2; x2:=x1+H; y1:=y2;
End;
If X=0 Then WriteLn('На этом промежутке корней НЕ СУЩЕСТВУЕТ.');
End.
Тестовый пример:
Найти
корень нелинейного уравнения
0
x1=1.00.
Второй и третий корень мнимый.
Введите промежуток : -5 5
Корень определен на промежутке ( 1.00 ; 1.10 )
X = 1.00000001 +- -0.00000768
Количество итерации=5
Протокол:
Проверка и вывод
Проверка и вывод:


Решение
задачи:

0.
График уравнения:

Протокол:
Введите промежуток: -5 5
Корень определен на промежутке (-2.0 ;-1.90)
X = -1.99830693 +- 0.00000000
Количество итерации=3
Корень определен на промежутке (-0.4 ;-0.3)
X = -0.33600869 +- -0.00001653
Количество итерации=4
Корень определен на промежутке (0.8;0.9)
X = 0.820235501 +- 0.00000031
Количество итерации=5
Корень определен на промежутке (1.6;1.7)
X = 1.64271501 +- 0.000005
Количество итерации=4
Отделим
корни уравнения графически (и программно).
Для этого построим график функции
и
и найдем абсциссы точек пересечения
графиков этих функций:
.
Проверка и вывод:

В качестве примера рассмотрим первый и второй корень.
Уточним корни методом касательных:
1)
.
Для этого определим знаки функции
и второй её производной
на этом отрезке [-2,25;-1,75].



-9,000911882<0
,
0,754516003>0
.
Тогда

Применяем
формулу
.

Оценим
погрешность приближения. Так как
не меняет свой знак на данном отрезке,
то
достигает своего наибольшего и наименьшего
значения на концах отрезка [-2,25;-1,75],
поэтому
для любого
.
Тогда используя оценку погрешности
для
любого
.
Получим
,

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



0,239664717>0
-0,11375516<0
.
Тогда

Применяем
формулу
.

Оценим
погрешность приближения. Так как
не меняет свой знак на данном отрезке,
то
достигает своего наибольшего и наименьшего
значения на концах отрезка
,
поэтому
для любого
.
Тогда используя оценку погрешности
для
любого
.
Получим
,

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