Bisection Method in MATLAB

The Bisection Method is a numerical method used to find the root of a function. It is a simple and robust method that works by repeatedly dividing an interval in half and checking which half the root lies in, and then repeating the process on the half-interval that contains the root.

Here are the steps for the Bisection Method:

  • Choose an initial interval [a, b] that contains the root of the function f(x).
  • Compute the midpoint c = (a + b)/2.
  • Evaluate the function at the midpoint f(c).
  • If f(c) = 0, then c is the root and we are done.
  • If f(c) has the same sign as f(a), then the root is in the interval [c, b]. Otherwise, the root is in the interval [a, c].
  • Repeat steps 2-5 until the desired level of accuracy is achieved.

The Bisection Method is guaranteed to converge to a root of the function as long as the function is continuous and changes sign in the interval [a, b]. However, it can be slow to converge, especially for functions that are not well-behaved, oscillatory, or have multiple roots. In practice, other methods such as the Newton-Raphson method or the Secant method may be more efficient for finding roots.

MATLAB Code of Bisection Method

Here is an example MATLAB code for implementing the Bisection Method:

function root = bisection_method(f, a, b, tol, max_iter)
% Inputs:
% f - function handle representing the function to find the root of
% a, b - the interval to search for the root in
% tol - the tolerance for the root
% max_iter - the maximum number of iterations to perform
%
% Output:
% root - the estimated root of the function

% Check that the function changes sign in the interval
if f(a) * f(b) >= 0
    error('Function must change sign in the interval.')
end

% Initialize variables
iter = 0;
error = inf;
c = (a + b) / 2;

% Iterate until convergence or maximum number of iterations reached
while error > tol && iter < max_iter
    fc = f(c);
    
    % Check if c is the root
    if fc == 0
        break
    end
    
    % Update the interval
    if f(a) * fc < 0
        b = c;
    else
        a = c;
    end
    
    % Compute the new midpoint and error
    c_new = (a + b) / 2;
    error = abs(c_new - c);
    c = c_new;
    iter = iter + 1;
end

% Check for convergence
if error > tol
    warning('Bisection method did not converge to desired tolerance.')
end

% Return the root
root = c;

To use this function, you would define your function ‘f‘ as a MATLAB function handle and call the ‘bisection_method‘ function with the appropriate inputs. For example:

f = @(x) x^3 - 2*x - 5;
a = 1;
b = 3;
tol = 1e-6;
max_iter = 100;

root = bisection_method(f, a, b, tol, max_iter);

This would estimate the root of the function ‘f(x) = x^3 - 2x - 5‘ in the interval [1, 3] with a tolerance of 1e-6 and a maximum of 100 iterations.