- #1

- 367

- 2

You are using an out of date browser. It may not display this or other websites correctly.

You should upgrade or use an alternative browser.

You should upgrade or use an alternative browser.

- Thread starter jdawg
- Start date

- #1

- 367

- 2

- #2

- 367

- 2

- #3

- 367

- 2

% 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{:});

Share: