我制作了这个脚本:
这部分用于创建 de 变量 Re 和 Ru 所以,我可以替换使用另一个。接下来,创建表达式,以便 MATLAB 可以推导它。
Re = 152788; % Reynolds
Ru = 4e-05; % roughnesss
syms x a b
dy = subs(1/sqrt(x)+2*log10((a/3.7)+2.51/(b*sqrt(x))), [a, b], [Ru,Re]);
df1 = diff(dy);
这是 Newton-Rapson 的脚本,它适用于其他表达式。
f=inline(dy);
df=inline(df1);
x0=input('Enter the initial value of x; x0: ');
precis=input('Enter the calculation precision; precis: ');
it=0;
x=x0;
d=f(x)/df(x);
fprintf('\n %6s %7s \n ','Iter.','x');
while abs(d)>precis
fprintf('\n %8.4f %8.4f \n',it,x);
x1=x-d;
it=it+1;
x=x1;
d=f(x)/df(x);
end;
fprintf('\n %8.4f %8.4f \n',it,x);
当我运行脚本时,迭代永远不会结束,继续无穷大。为数据获得的摩擦系数为 0.016