Bisection method- code stops after one iteration
조회 수: 3 (최근 30일)
이전 댓글 표시
Hi, my code doesn't seem to continue beyond the first iteration of the bisection method in my loop. I also am not getting the right answer. I'm not sure where the mistake is.
function c = findroot(f,a,b,e)
% a is the initial value
% b is the final value
% e is the tolerance
if f(a)*f(b)>0
error('f(a) and f(b) must have opposite signs')
end
c = (a+b)/2;
while abs(b-c) <= e;
f = f(c);
break
if f(a)*f(c) <= 0;
c = b;
f(c) = f(b);
else
c = a;
f(c) = f(a);
end
end
end
I am calling the following in the command window:
>> f = @(x) x.^2-x-1;
>> findroot(f, 1, 2, 0.001)
댓글 수: 0
채택된 답변
Torsten
2015년 12월 4일
function c = findroot(f,a,b,e)
% a is the initial value
% b is the final value
% e is the tolerance
left = a;
right = b;
middle = (left+right)/2;
fleft = f(left);
fright = f(right);
fmiddle = f(middle);
if fleft*fright > 0
error('f(a) and f(b) must have opposite signs')
end
while right-left >= e && abs(fmiddle) >= e
if fmiddle*fleft <= 0
right = middle;
fright = fmiddle;
else
left = middle;
fleft = fmiddle;
end
middle = (left+right)/2;
fmiddle = f(middle);
end
c = middle;
end
Best wishes
Torsten.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!