ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 15.01.2021
Просмотров: 304
Скачиваний: 1

2.6.2.
Метод хорд
> restart;
> hord:=proc(eps,a,b)
# eps — точность, с которой необходимо вычислить корни уравнений;
# a,b — границы отрезка, в котором находится один корень
local i,x0,x1,l,r;
# i — переменная цикла
# x0,x1 — два последовательных приближения к точному решению
# l,r — концы отрезка
# задаем левую и правую границы отрезка, который содержит корень
l:=a; r:=b;
# вычисление первого приближения к корню
x0:=l-(f(l)*(r-l))/(f(r)-f(l));
if f(x0)<>0 then
#переопределение границ отрезка
if f(l)*f(x0)<0 then r:=x0 else l:=x0 end if
else x0:=evalf(x0); print(x0) end if;
# вычисление второго приближения к корню
x1:=l-(f(l)*(r-l))/(f(r)-f(l));
for i from 1 while abs(x1-x0)>=eps do
if f(x1)<>0 then
# переопределение границ отрезка
if f(l)*f(x1)<0 then r:=x1 else l:=x1; end if
else x1:=evalf(x1); print(x1) end if;
x0:=x1;
# вычисление последующего приближения к корню
x1:=l-(f(l)*(r-l))/(f(r)-f(l));
end do;
x1:=evalf(x1); print(x1);
end proc;
# задаем функцию корни которой необходимо найти
> f:=x1-> x1ˆ 3-sin(x1);
# построение графика функции, для локализации корня функции
графическим способом
> plot(f(x),x=-1..1);
Проверим работу процедуры
> hord(0.0001,-0.2,0.3);
0.
6

Рис. 5. График функции
f
(
x
) =
x
1
3
−
sin
x
1
> hord(0.0001,0.8,1.0);
0.9286243615
> hord(0.0001,-1.0,-0.8);
-0.9286243615
2.6.3.
Метод Ньютона
> restart;
> newt:=proc(a,eps)
# a — левая граница отрезка, в котором находится один корень
# eps — точность, с которой необходимо вычислить корни уравнений
local i,x0,x1,df,y;
# i — переменная цикла
# x0, x1 — два последующих приближения к корню
# df — производная функции
f
(
x
) = 0
# y — переменная в уравнении производной от функции
f
(
x
)
# в качестве первого приближения к корню выбирается левая грани-
ца отрезка
x0:=a;
# нахождение производной функции в точке
df:=y->subs(x=y,diff(f(x),x));
x1:=evalf(x0-f(x0)/df(x0)); # второе приближение к корню
for i from 1 while abs(x1-x0)<eps do
x0:=x1;
# вычисление последующих приближений к корню
x1:=x0-f(x0)/df(x0);
7

end do;
x1:=evalf(x1); # вывод результата
end proc;
Зададим функцию корни которой необходимо найти
> f:=x-> exp(x)*xˆ 3-cos(x)*sin(x);
> plot(f(x),x=-2..1); # построение графика функции, для локализа-
ции корней функции графическим способом
Рис. 6. График функции
f
(
x
) =
x
3
e
x
−
cos
x
sin
x
Проверим работу процедуры
> newt(-1.1,0.0001);
-1.071336962
> newt(-0.1,0.0000001);
0.0031947103
> newt(0.5,0.00001);
0.7378792875
8