What is the Bisect Function and How Does it Work?

  • Thread starter Thread starter jdawg
  • Start date Start date
  • Tags Tags
    Function
Click For Summary
The bisect function is designed to find the root of a given function using the bisection method, which requires a lower and upper guess for the root. It checks for a sign change between the function values at these guesses to ensure a root exists within the interval. The function iteratively narrows down the interval by calculating the midpoint and updating the bounds based on the sign of the function at the midpoint. It also tracks the approximate relative error and the number of iterations until the desired error or maximum iterations are reached. Proper input validation is included to ensure the function operates correctly.
jdawg
Messages
366
Reaction score
2

Homework Statement


I'm not really sure how to define my bisect function.. I included my work and question in the images attached.

Homework Equations

The Attempt at a Solution

 

Attachments

  • pitch.png
    pitch.png
    53 KB · Views: 503
  • w2.png
    w2.png
    9.2 KB · Views: 469
Last edited:
Physics news on Phys.org
I guess I was thinking it was a built in function in matlab, I've tried to look at a few examples of bisection codes and I'm not super sure how to format it to make it work with this problem.
 
function [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,varargin)
% bisect: root location zeroes
% [root,fx,ea,iter]=bisect(func,xl,xu,es,maxit,p1,p2,...):
% uses bisection method to find the root of func
% input:
% func = name of function
% xl, xu = lower and upper guesses
% es = desired relative error (default = 0.0001%)
% maxit = maximum allowable iterations (default = 50)
% p1,p2,... = additional parameters used by func
% output:
% root = real root
% fx = function value at root
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
test = func(xl,varargin{:})*func(xu,varargin{:});
if test>0,error('no sign change'),end
if nargin<4|isempty(es), es=0.0001;end
if nargin<5|isempty(maxit), maxit=50;end
iter = 0; xr = xl; ea = 100;
while (1)
xrold = xr;
xr = (xl + xu)/2;
iter = iter + 1;
if xr ~= 0,ea = abs((xr - xrold)/xr) * 100;end
test = func(xl,varargin{:})*func(xr,varargin{:});
if test < 0
xu = xr;
elseif test > 0
xl = xr;
else
ea = 0;
end
if ea <= es | iter >= maxit,break,end
end
root = xr; fx = func(xr, varargin{:});
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
2K
Replies
4
Views
2K
Replies
11
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 9 ·
Replies
9
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
1K