Метод на разполовяването за решаване на уравнения

Графично определяне на корените

f[x_]:=2(x^3)-10Cos[2x]+5(x^2)-1
Plot[f[x],{x,-10,10}]

Plot[f[x],{x,-5,5}]

Извод: Броят корени е три.

Локализация на най-големия корен

Plot[f[x],{x,0,1}]

f[0]

f[1.]

Извод: Стойностите на фунцкията в двата края на избрания интервал [0; 1] са с противоположни знаци. Следователно в този интервал съществува корен.

Извършване на стъпките по метода

Използваме Mathematica като калкулатор

f[0.5]

f[0.75]

((0.5+0.75)/2)

f[0.625]

Съставяне на програмен код

f[x_]:=2(x^3)-10Cos[2x]+5(x^2)-1
a=0.;b=1;
For[n=0,n≤ 3,n++,
m=((a+b)/2);eps=((b-a)/2);
Print["n = ",n," (Subscript[a, n]) = ",a," (Subscript[b, n]) = ",b," (Subscript[m, n]) = ",m," f((Subscript[m, n])) = ",f[m]," грешка (Subscript[ϵ, n]) = ",eps];
If[f[m]<0,a=m,b=m]
]

Правим повече итерации:

f[x_]:=2(x^3)-10Cos[2x]+5(x^2)-1
a=0.;b=1;
For[n=0,n≤ 30,n++,
m=((a+b)/2);eps=((b-a)/2);
Print["n = ",n," (Subscript[a, n]) = ",SetPrecision[a,10]," (Subscript[b, n]) = ",SetPrecision[b,10]," (Subscript[m, n]) = ",SetPrecision[m,10]," f((Subscript[m, n])) = ",f[m]," грешка (Subscript[ϵ, n]) = ",eps];
If[f[m]<0,a=m,b=m]
]

Оценка на броя на стъпките за достигане на точност

Въпрос: Колко стъпки гарантират предварително зададена точност? (за примера точността е ϵ = (10^(-6)))

Log2[((1.-0)/(10^(-6)))]-1

Извод: Необходими са 19 итерации (стъпки) за достигане на точност  ϵ = (10^(-6))

Въпрос: Колко стъпки гарантират предварително зададена точност? (за примера точността е ϵ = (10^(-16)))

Log2[((1.-0)/(10^(-16)))]-1

Извод: Необходими са 53 итерации (стъпки) за достигане на точност  ϵ = (10^(-16))