Error in bisection method code in Matlab

Posted by Amanda Collins on Stack Overflow See other posts from Stack Overflow or by Amanda Collins
Published on 2012-09-15T19:09:23Z Indexed on 2012/09/15 21:38 UTC
Read the original article Hit count: 177

Filed under:
|

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.

© Stack Overflow or respective owner

Related posts about matlab

Related posts about bisection