Filter löschen
Filter löschen

Bisection method code - question.

1 Ansicht (letzte 30 Tage)
Yuval
Yuval am 26 Dez. 2013
Bearbeitet: Matt J am 26 Dez. 2013
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

Antworten (1)

Matt J
Matt J am 26 Dez. 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 Kommentare
Yuval
Yuval am 26 Dez. 2013
Bearbeitet: Yuval am 26 Dez. 2013
Okay, now the following code doesn't get stuck but the answer seems to be inaccurate. Any idea why?
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
I mean, it keeps giving out h=0.9998, even when I change the while condition to (err > 2.009032E-11), for instance.
Matt J
Matt J am 26 Dez. 2013
Bearbeitet: Matt J am 26 Dez. 2013
What data are you using for V,L,r,h1,h2?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by