Topic : Bisection Method - Roots of Equations
Simulation : Graphical Simulation of the Method
Language : Mathmatica 4.1
Authors : Nathan Collier, Autar Kaw
Date : 1 July 2002
Abstract : This simulation shows how the bisection method for finding roots of an equation f[x] = 0 works.

INPUTS: Enter the Following

Function in f[x] = 0

f[x_] := x^3 - 0.165*x^2 + 3.993*10^-4

Range of 'x' you want to see the function

(Subscript[x, b]) = -0.02;
(Subscript[x, e]) = 0.12;

curve = 
        Plot[f[x], {x, (Subscript[x, b]), (Subscript[x, e])}, 
          PlotLabel -> "Entered function on given interval", 
          TextStyle -> {FontSize -> 11}];

Lower initial guess

(Subscript[x, l]) = 0.0;

Upper initial guess

(Subscript[x, u]) = 0.11;

SOLUTION

maxi = f[(Subscript[x, b])];
mini  =  f[(Subscript[x, b])];
step  =  ((Subscript[x, e]) - (Subscript[x, b]))/10;
Do[ If[f[i] >  maxi, maxi = f[i]]; 
        If[f[i] <  mini, mini = f[i]],  {i, (Subscript[x, b]), (Subscript[x, e]), 
          step}];
tot = maxi - mini;
mini = mini - 0.1*tot;
maxi  =  maxi  +  0.1*tot;

Check first if the lower and upper guesses bracket the root of the equation

f[(Subscript[x, l])]

f[(Subscript[x, u])]

%*%%

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses", TextStyle -> {FontSize -> 11}];

Iteration 1

New estimate of root

(Subscript[x, r]) = ((Subscript[x, u]) + (Subscript[x, l]))/2

Finding the value of the function at the lower and upper guesses and the estimated root

f[(Subscript[x, l])]

f[(Subscript[x, u])]

f[(Subscript[x, r])]

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], 
        Graphics[Line[{{(Subscript[x, r]), maxi}, {(Subscript[x, r]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses and estimated root", 
        TextStyle -> {FontSize -> 9}];

Check the interval between which the root lies. Does it lie in ((Subscript[x, l]),(Subscript[x, r])) or ((Subscript[x, r]),(Subscript[x, u]))?

If[f[(Subscript[x, r])]*f[(Subscript[x, u])] ≤ 0, (Subscript[x, l]) = (Subscript[x, r]), 
        (Subscript[x, u]) = (Subscript[x, r])];

(Subscript[x, u])

(Subscript[x, l])

Store the value of the previous guess in (Subscript[x, p])to calculate absolute relative approximate error.

(Subscript[x, p]) = (Subscript[x, r]);

Iteration 2

New estimate of root

(Subscript[x, r]) = ((Subscript[x, l]) + (Subscript[x, u]))/2

Finding the value of the function at the lower and upper guesses and the estimated root

f[(Subscript[x, l])]

f[(Subscript[x, u])]

f[(Subscript[x, r])]

Absolute relative approximate error, Abs[(Subscript[ϵ, a])].

(Subscript[ϵ, a]) = Abs[((Subscript[x, r]) - (Subscript[x, p]))/(Subscript[x, r])*100]

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], 
        Graphics[Line[{{(Subscript[x, r]), maxi}, {(Subscript[x, r]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses and estimated root", 
        TextStyle -> {FontSize -> 11}];

Check the interval between which the root lies. Does it lie in ((Subscript[x, l]),(Subscript[x, r])) or ((Subscript[x, r]),(Subscript[x, u]))?

If[f[(Subscript[x, r])]*f[(Subscript[x, u])] ≤ 0, (Subscript[x, l]) = (Subscript[x, r]), 
        (Subscript[x, u]) = (Subscript[x, r])];

(Subscript[x, u])

(Subscript[x, l])

Store the value of the previous guess in (Subscript[x, p])to calculate absolute relative approximate error.

(Subscript[x, p]) = (Subscript[x, r]);

Iteration 3

New estimate of root

(Subscript[x, r]) = ((Subscript[x, l]) + (Subscript[x, u]))/2

Finding the value of the function at the lower and upper guesses and the estimated root

f[(Subscript[x, l])]

f[(Subscript[x, u])]

f[(Subscript[x, r])]

Absolute relative approximate error, Abs[(Subscript[ϵ, a])].

(Subscript[ϵ, a]) = Abs[((Subscript[x, r]) - (Subscript[x, p]))/(Subscript[x, r])*100]

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], 
        Graphics[Line[{{(Subscript[x, r]), maxi}, {(Subscript[x, r]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses and estimated root", 
        TextStyle -> {FontSize -> 11}];

Check the interval between which the root lies. Does it lie in ((Subscript[x, l]),(Subscript[x, r])) or ((Subscript[x, r]),(Subscript[x, u]))?

If[f[(Subscript[x, r])]*f[(Subscript[x, u])] ≤ 0, (Subscript[x, l]) = (Subscript[x, r]), 
        (Subscript[x, u]) = (Subscript[x, r])];

(Subscript[x, u])

(Subscript[x, l])

Store the value of the previous guess in (Subscript[x, p])to calculate absolute relative approximate error.

(Subscript[x, p]) = (Subscript[x, r]);

Iteration 4

New estimate of root

(Subscript[x, r]) = ((Subscript[x, l]) + (Subscript[x, u]))/2

Finding the value of the function at the lower and upper guesses and the estimated root

f[(Subscript[x, l])]

f[(Subscript[x, u])]

f[(Subscript[x, r])]

Absolute relative approximate error, Abs[(Subscript[ϵ, a])].

(Subscript[ϵ, a]) = Abs[((Subscript[x, r]) - (Subscript[x, p]))/(Subscript[x, r])*100]

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], 
        Graphics[Line[{{(Subscript[x, r]), maxi}, {(Subscript[x, r]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses and estimated root", 
        TextStyle -> {FontSize -> 11}];

Check the interval between which the root lies. Does it lie in ((Subscript[x, l]),(Subscript[x, r])) or ((Subscript[x, r]),(Subscript[x, u]))?

If[f[(Subscript[x, r])]*f[(Subscript[x, u])] ≤ 0, (Subscript[x, l]) = (Subscript[x, r]), 
        (Subscript[x, u]) = (Subscript[x, r])];

(Subscript[x, u])

(Subscript[x, l])

Store the value of the previous guess in (Subscript[x, p])to calculate absolute relative approximate error.

(Subscript[x, p]) = (Subscript[x, r]);

Iteration 5

New estimate of root

(Subscript[x, r]) = ((Subscript[x, l]) + (Subscript[x, u]))/2

Finding the value of the function at the lower and upper guesses and the estimated root

f[(Subscript[x, l])]

f[(Subscript[x, u])]

f[(Subscript[x, r])]

Absolute relative approximate error, Abs[(Subscript[ϵ, a])].

(Subscript[ϵ, a]) = Abs[((Subscript[x, r]) - (Subscript[x, p]))/(Subscript[x, r])*100]

Show[Graphics[Line[{{(Subscript[x, u]), maxi}, {(Subscript[x, u]), mini}}]], curve, 
        Graphics[Line[{{(Subscript[x, l]), maxi}, {(Subscript[x, l]), mini}}]], 
        Graphics[Line[{{(Subscript[x, r]), maxi}, {(Subscript[x, r]), mini}}]], Axes -> True, 
        PlotLabel -> "Entered function on given interval with upper \
and lower guesses and estimated root", 
        TextStyle -> {FontSize -> 11}];

Check the interval between which the root lies. Does it lie in ((Subscript[x, l]),(Subscript[x, r])) or ((Subscript[x, r]),(Subscript[x, u]))?

If[f[(Subscript[x, r])]*f[(Subscript[x, u])] ≤ 0, (Subscript[x, l]) = (Subscript[x, r]), 
        (Subscript[x, u]) = (Subscript[x, r])];

(Subscript[x, u])

(Subscript[x, l])

Store the value of the previous guess in (Subscript[x, p])to calculate absolute relative approximate error.

(Subscript[x, p]) = (Subscript[x, r]);