用MATLAB实现fzero隐式方程的解

时间:2011-04-16 18:09:13

标签: implicit equation matlab

我一直试图通过在MATLAB中使用fzero来解决这个隐式方程。保存代码的文件名为"colebrook",到目前为止我输入的内容如下所示。

D = input('Please enter the pipe diameter in meters: ');
V = input('Please enter the fluid velocity in m/s: ');
rho = input('Please enter fluid density in kg/m^3: ');
mew = input('Please enter fluid viscosity in kg/m*s: ');
Re = D*V*rho/mew;

eps = input('Enter absolute roughness in milimeters: ');
eD = eps/(D*1000);

a = fzero(colebrookfunc,0.1);
fprintf(a);

我要解决的公式保存在另一个名为"colebrookfunc"的m文件中,其中包含的代码如下所示。

function F = colebrookfunc(x)
    F = x - 1./(-4 * log10(eD/3.7 + 1.256./(Re*x.^0.5))).^2;

当我跑进去时我得到这个错误:

??? Input argument "x" is undefined.

Error in ==> colebrookfunc at 2
F = x - 1./(-4 * log10(eD/3.7 + 1.256./(Re*x.^0.5))).^2;
Error in ==> colebrook at 28
a = fzero(colebrookfunc,0.1);

我的错误是什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

您必须将colebrookfunc作为function handle传递。此外,除非您将colebrookfunc定义为嵌套函数(显然,您没有),否则您需要以某种方式将参数传递给函数。

因此,您对fzero的调用应如下所示:

a = fzero(@(x)colebrookfunc(x,eD,Re),0.1)

coolebrookfunc的第一行必须是

function F = colebrookfunc(x,eD,Re)