Error in bisection method code in Matlab
- by Amanda Collins
I need to write a proper implementation of the bisection method, which means I must address all possible user input errors. Here is my code:
function [x_sol, f_at_x_sol, N_iterations] = bisection(f, xn, xp, eps_f, eps_x)
% solving f(x)=0 with bisection method
% f is the function handle to the desired function,
% xn and xp are borders of search,
% f(xn)<0 and f(xp)>0 required,
% eps_f defines how close f(x) should be to zero,
% eps_x defines uncertainty of solution x
if(f(xp) < 0)
error('xp must be positive')
end;
if(f(xn)>0)
error('xn must be negative')
end;
if (xn >= xp)
error ('xn must be less than xp')
end;
xg=(xp+xn)/2; %initial guess
fg=f(xg); % initial function evaluation
N_iterations=1;
while ( (abs(fg) > eps_f) & (abs(xg-xp) > eps_x) )
if (fg>0)
xp=xg;
else
xn=xg;
end
xg=(xp+xn)/2; %update guess
fg=f(xg); %update function evaluation
N_iterations=N_iterations+1;
end
x_sol=xg; %solution is ready
f_at_x_sol=fg;
if (f_at_x_sol > eps_f)
error('No convergence')
end
and here is the error message I receive when I try to test this in Matlab:
>> bisection(x.^2, 2, -1, 1e-8, 1e-10)
Attempted to access f(-1); index must be a positive integer or logical.
Error in bisection (line 9)
if(f(xp)<0)
I was attempting to see if my error codes worked, but it doesn't look like they do. I get the same error when I try to test it on a function that should work.