Bisection method not returning any values.
    조회 수: 4 (최근 30일)
  
       이전 댓글 표시
    
So, I've written the following code for the bisection method, however it doesn't seem to be returning any values.
function [r, n] = bisection(a,b,f,tol)
if (f(a)*f(b) > 0)
    error('Invalid choice of interval');
end
r = 0;
n = 0;
while ((b - a)/2 > tol)
    n = n + 1;
    r = (a + b)/2;
    if(f(r) == 0)
        break;
    elseif (f(a)*f(b) < 0)
        b = r;
    else
        a = r;
    end
end
I'm using it with inputs of (0,1,q,0.5) I also tried tol as 0.1 too. q is some anonymous function that I defined, in this case it's q(x) = 3x - 1. Like, I type the command Bisection(0,1,q,0.5) and it executes without returning an error but doesn't return any numerical values whatsoever. Any ideas why this is?
댓글 수: 0
채택된 답변
  Matt J
      
      
 2013년 10월 16일
        
      편집: Matt J
      
      
 2013년 10월 16일
  
      Works fine for me. It returns the wrong value, but you can fix that by changing f(a)*f(b) < 0 to f(a)*f(r) < 0.
댓글 수: 5
  Matt J
      
      
 2013년 10월 16일
				
      편집: Matt J
      
      
 2013년 10월 16일
  
			No, there is no general algorithm for finding "all" roots of a general function without at least knowing in advance a lower bound on the spacing between the roots.
I assume, by the way, that this is just a homework exercise. In reality, you would never use your own home-brewed bisection algorithm. You would just use FZERO. So, there is no obvious rationale for giving this code more capabilities then the homework assignment requests.
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


