内联函数和 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);
我想求解 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);