numerical root finding procedures

14 ビュー (過去 30 日間)
harley
harley 2013 年 8 月 19 日
trying to solve the part under else. eover and Re are known, but still leaves me with (f) on both side of the original colebrook equation. 1/sqrt(f) = -2*log10(eoverD/3.7 + 2.51/Re/sqrt(f)). Please help, a bit stuck.
Re = V*D1 / nu;
% Check for laminar flow.
if Re < 2300
F = 64 / Re;
else
F(f)=1/sqrt(f)+2*log10(eoverD/3.7 + 2.51/Re/sqrt(f));
end
  3 件のコメント
harley
harley 2013 年 8 月 19 日
thanks for that, when i run i get in the command window;
Exiting fzero: aborting search for an interval containing a sign change because complex function value encountered during search. (Function value at -0.28 is -9.229-3.1086i.) Check function or try again with a different starting value.
code is
D = 0.1;
e = 0.0015e-3;
nu = 1.01e-6;
eoverD = e/D;
%
V = 2;
%
Re = V*D / nu;
%
if Re < 2300
f = 64 / Re;
else
darbyFormula = @(x) 1/sqrt(x)+2*log10(eoverD/3.7 + 2.51/Re/sqrt(x));
f = fzero(darbyFormula,1);
end
harley
harley 2013 年 8 月 19 日
got it working, thanks

サインインしてコメントする。

採用された回答

the cyclist
the cyclist 2013 年 8 月 19 日
編集済み: the cyclist 2013 年 8 月 19 日
You should be able to use the function fzero() to solve for f in your implicit equation.
>> doc fzero
for details.
I think this will do it, but definitely check:
darbyFormula = @(x) 1/sqrt(x)+2*log10(eoverD/3.7 + 2.51/Re/sqrt(x));
f = fzero(darbyFormula,1)

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2013 年 8 月 19 日
If you do some algebraic manipulation, you get
x = 0.3340248829e22 / (-0.5020000000e11 * lambertw(.4586822894 * Re * exp(.1239681863 * eoverD * Re)) + 6223202955 * eoverD * Re)^2
with no searching (provided that eoverD already has a value)
lambertw is in the Symbolic Toolbox. If you do not have that, then see http://www.mathworks.com/matlabcentral/newsreader/view_thread/32527

カテゴリ

Help Center および File ExchangeMATLAB についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by