Professor Diomar Cesar Lobao

Universidade Federal Fluminense-Volta Redonda, RJ, Brasil

Diomar Cesar


Dept. Ciências Exatas - Exact Science Dept.

Search

bisect.m

% Demonstration of Bisection Root Finding of a function
%
% The function is defined in the file 'fcn.m' as follows:
%      function y = fcn(x)
%      y = 9.8 * 68.1 * (1-exp(-10*x/68.1))/x - 40;

clear;   

      xl = input ('Enter lower bound of root bracket:  ');
      xu = input ('Enter upper bound of root bracket:  ');
maxerror = input ('Enter maximum error (percent):      ');
   maxit = input ('Enter maximum number of iterations: ');

fplot('fcn',[xl xu]); grid on; hold on;

count = 0;          % iteration counter
actual_error = 1;   % to force entry to while loop

fprintf('\n  #         xl         xu         xr      error\n\n');

% main loop until interval width small enough

while (actual_error > maxerror) & (count < maxit)

  count = count + 1;
  xr = (xl + xu)/2;
  plot(xr,fcn(xr),'ro');

  if xr ~= 0                            % ~= not equal
    actual_error = abs((xu - xl)/(xu + xl)) * 100;
  end

  fprintf('%3g %10g %10g %10g %10.4f\n',count,xl,xu,xr,actual_error)

  test = fcn(xl) * fcn(xr);  % form test product

  if test == 0
    actual_error = 0;
  elseif test < 0
    xu = xr;      % root is below xr
  else        % i.e. test > 0
    xl = xr;      % root is above xr
  end

end
Skip to content