ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 15.01.2021

Просмотров: 304

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

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


background image

Рис. 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


background image

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