是否内联函数和Fzero可以用来解决非线性方程,其中输入的其他参数是用户自定义的



我想在matlab中求解值Ql的方程,为此我给出了命令:

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处使用==> f0出错由于用户提供了内联object ==> f, FZERO无法继续失败,出现以下错误。

内联函数没有足够的输入。

但我确信我输入了所需的每个值。是否内联函数总是使用常量而不是用户定义的函数,如果是这样,我应该使用什么来解决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);

最新更新