内联函数和 Fzero 是否可用于求解非线性方程,其中输入的其他参数是用户定义的?

Does inline function and Fzero can be used to solve nonlinear equations in which other parameters entered are user defined?

我想求解 matlab 中的一个方程,为此我给出了命令:

f=inline('Ql^2 + Ql/(1+x((Q4*Ql)/(Q4+Ql))+ y)*(x +(x*(1+z)/(Q4*Ql)^2)
/(1+(x*Q4*Ql*z)/((Q4+Ql)*(1+y)+ x*Q4*Ql)))');
  g = fzero(f,0);

其中 Q4 是根据从用户获取的参数计算的,x y z 是用户的直接输入,我的问题是当我使用它时出现错误:

???在 301 使用 ==> fzero 时出错 FZERO 无法继续,因为用户提供了内联 object ==> f 失败并出现以下错误。

Not enough inputs to inline function.

但我确信我输入了所有需要的值。 内联函数是否总是使用常量而不是用户定义的函数,如果是这样,我应该使用什么来求解 Ql 的这个方程?

您的代码有几个问题。首先,inline 已弃用。改为使用匿名函数:

f = @(Ql) (Ql^2 + Ql/(1+x((Q4*Ql)/(Q4+Ql))+ y)*(x +(x*(1+z)/(Q4*Ql)^2) /(1+(x*Q4*Ql*z)/((Q4+Ql)*(1+y)+ x*Q4*Ql))));

其次,x((Q4*Ql)/(Q4+Ql))部分将x视为数组或函数。我假设您在这里想要的是将 x 与括号中的表达式相乘:

f = @(Ql) (Ql^2 + Ql/(1+x*((Q4*Ql)/(Q4+Ql))+ y)*(x +(x*(1+z)/(Q4*Ql)^2) /(1+(x*Q4*Ql*z)/((Q4+Ql)*(1+y)+ x*Q4*Ql))));

第三,函数可能未在您最初猜测的点 0 处定义。为了测试代码,我使用了值 x = 1; y = 2; z = 3; Q4 = 4;,对于这些值,f(0) 是 NaN。确保您的实际参数不会发生这种情况。

如果一切正常,这段代码应该可以解决问题:

f = @(Ql) (Ql^2 + Ql/(1+x*((Q4*Ql)/(Q4+Ql))+ y)*(x +(x*(1+z)/(Q4*Ql)^2) /(1+(x*Q4*Ql*z)/((Q4+Ql)*(1+y)+ x*Q4*Ql))));
g = fzero(f, 0);