MATLAB Answers

Root Finding Method Query

124 views (last 30 days)
Tony Rankin
Tony Rankin on 1 Mar 2021
Commented: John D'Errico on 21 Mar 2021 at 15:49
This question was flagged by Adam Danz
Please delete this question.
  2 Comments
John D'Errico
John D'Errico on 21 Mar 2021 at 15:49
It is rude to delete your question when someone has spent a great deal of time to answer your problem. Others can benefit from the solution. But when you remove the question, you remove all context for the answer.

Sign in to comment.

Answers (1)

David Hill
David Hill on 1 Mar 2021
Your problem is with your function.
E=1;
D=5;
Re=1;
f=@(x)-1./sqrt(x)-2.*log10(((E/D)/3.7)+2.51./(Re*sqrt(x)));%is this the equation? E, D, and Re will have to be provided before the function call
R=MyBiscection(f,0,1,1e-4);
  4 Comments
Steven Lord
Steven Lord on 1 Mar 2021
First, please don't put "clear all" in your script files. When you need to clear the variables, execute it at the prompt in the MATLAB Command Window.
Second, your code does not handle the case where the absolute value of f(m) is not less than tol and the sign of f(m) is not the same as either the sign of f(a) or the sign of f(b).
sp1 = sign(1) % +1
sp1 = 1
sm1 = sign(-1) % -1
sm1 = -1
sc = sign(3+4i) % complex
sc = 0.6000 + 0.8000i
To detect this I might put some code in your function to display the values of a, m, and b along with f(m) before entering your if / elseif section, something along the lines of this untested code:
fm = f(m);
result = table(a, m, b, fm, 'VariableNames', ["a", "m", "b", "f(m)"]);
disp(result)
Or maybe pass this between the recursive calls and augment it in each one so you can see the progress.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!