MATLAB: Using the Bisection Method,calculating xr and approximate errors??

bisectionbisection methoditerationsxr

Hi, I tried to solve a question using the bisection method, trying to find out xr (root of eq.) and aprroximate error, but there is a problem with my program that I need to define xrold anyhow as the value of xr changes in every iteration. In addition, I need to find Ea=((xr-xrold)/xr))*100 using the old and new values for xr in each step once again. I don't know how to employ this circle for each values of xr. Could you possibly help?
That was the program I made where I got an error at xrold value that obviously, it hasn't been defined properly;
In the question we have the given values of Es, xl, xu and a polynomial function which is f(x)=26+85*x-91*x^2+44*x^3-8*x^4+x^5
%Solve the equation using the bisection method.
xl=0.5;
xu=1;
Es=10;
iter=0;
while(1)
xrold=xr;
f=@(x) -26+85*x-91*x^2+44*x^3-8*x^4+x^5;
xr=(xl+xu)/2;
iter=iter+1;
if xr~=0;
Ea=abs((xr-xrold)/xr)*100;
end
test=f(xl)*f(xr);
if test<0;
xu=xr;
elseif test >0;
xl=xr;
else
Ea=0;
end
if Ea<Es
break
end
end

Best Answer

Onur - if the problem is because you don't have an xr on the first iteration of the while loop, then just wait until you do. And so allow one iteration to pass without you calculating the Ea value. Try the following
f=@(x) -26+85*x-91*x^2+44*x^3-8*x^4+x^5;
while iter<1000
xr=(xl+xu)/2;
iter=iter+1;
test=f(xl)*f(xr);
if test<0;
xu=xr;
elseif test >0;
xl=xr;
end
if iter > 1
if abs(xr)>0
Ea=abs((xr-xrold)/xr)*100;
if abs(Ea)<Es
break
end
end
end
xrold=xr;
end
In the above, note the following:
  • define the anonymous function outside of the while loop (no need to do it on every iteration);
  • cap the number of iterations in the while loop to 1000 so that we don't get stuck in an infinite loop;
  • only calculate Ea on every iteration after the first one; and
  • initialize xold at the end of the iteration
Related Question