Bisection method code - question.
Show older comments
Hi, I wrote the following function for solving V=L[arccos(h/r)r^2 - h(r^2-h^2)^0.5] using the bisection method. However, as I execute the program it gets stuck, yet I cannot figure out why. I'd appreciate any comments.
function h = volume(V,L,r,h1,h2)
h=(h1+h2)/2;
err=abs(V-L*(acosd(h/r)*r^2-h*sqrt(r^2-h^2)));
while (err > 0.01)
if (V-L*(acosd(h1/r)*r^2-h1*sqrt(r^2-h1^2))*(V-L*(acosd(h/r)*r^2-h*sqrt(r^2-h^2))) < 0)
h2=h;
else
h1=h;
end
h=(h1+h2)/2;
err=abs(V-L*(acosd(h/r)*r^2-h*sqrt(r^2-h^2)));
end
Answers (1)
Matt J
on 26 Dec 2013
I think you're just missing some parentheses in
if (V-L*(acosd(h1/r)*r^2-h1*sqrt(r^2-h1^2))*(V-L*(acosd(h/r)*r^2-h*sqrt(r^2-h^2))) < 0)
4 Comments
It would be easier to read and debug if you calculate "err" using a function instead of repeating its expression all the time,
function h = volume(V,L,r,h1,h2)
err=@(h) abs(V-L*(acosd(h/r)*r^2-h*sqrt(r^2-h^2))); %anonymous func
h=(h1+h2)/2;
while (err(h) > 0.01)
if err(h1)*err(h) < 0
h2=h;
else
h1=h;
end
h=(h1+h2)/2;
end
end
Categories
Find more on MATLAB in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!