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

ЛОКАЛИЗАЦИЯ:

f[x_]:=4x^5+6Cos[4x-5];
Plot[f[x],{x,-2,2}]

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

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

f[0.5]

f[1.]

Правим извода относно локализацията...

УТОЧНЯВАНЕ НА КОРЕНА 
Използваме Mathematica като калкулатор:

f[0.75]

((0.75 +1)/2)

f[0.875]

Програма реализираща алгоритъма:

Clear[a,b,f,x,k,m]
f[x_]:=4x^5+6Cos[4x-5];
a=0.5;b=1;
For[k=0, k≤2, k++,
(* body: *)
m = ((a+b)/2);
Print["k = ",k, ": a = ",a, " b = ",b, " m = ", m, " f(m) = ", f[m]]
If[f[m]>0,b=m,a=m]
(* end For *)]

Пояснение за If:

If[f[m]>0,
(* true: *)
b=m
,
(* false: *)
a=m
(* end If *)]

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

Clear[a,b,f,x,k,m]
f[x_]:=4x^5+6Cos[4x-5];
a=0.5;b=1;
For[k=0, k≤30, k++,
(* body: *)
m = ((a+b)/2);
Print["k = ",k, ": a = ",SetPrecision[a,10], " b = ",SetPrecision[b,10], " m = ", SetPrecision[m,10], " f(m) = ", f[m]]
If[f[m]>0,b=m,a=m]
(* end For *)]

Колко стъпки са необходими за достигане на точност (10^(-9))?

Log2[((1-0.5)/(10^(-9)))]-1

Clear[a,b,f,x,k,m,epsk]
f[x_]:=4x^5+6Cos[4x-5];
a=0.5;b=1;
For[k=0, k≤28, k++,
(* body: *)
m = ((a+b)/2);
epsk=((b-a)/2);
Print["k = ",k, ": a = ",SetPrecision[a,10], " b = ",SetPrecision[b,10], " m = ", SetPrecision[m,10], " f(m) = ", f[m], " (Subscript[ϵ, k]) = ", epsk];
If[f[m]>0,b=m,a=m]
(* end For *)]

Алгоритъм със стоп-критерий за достигане на грешката:

Clear[a,b,f,x,k,m,epsk]
f[x_]:=4x^5+6Cos[4x-5];
a=0.5;b=1;
epsk = 1;
For[k=0, epsk > (10^(-9)), k++,
(* body: *)
m = ((a+b)/2);
epsk=((b-a)/2);
Print["k = ",k, ": a = ",SetPrecision[a,10], " b = ",SetPrecision[b,10], " m = ", SetPrecision[m,10], " f(m) = ", f[m], " (Subscript[ϵ, k]) = ", epsk];
If[f[m]>0,b=m,a=m]
(* end For *)]