我已经编写了这个函数,我已经为rg和Lp定义了值,但是当我运行这个函数时它仍然返回错误:(输入参数“Lr”未定义。
==>中的错误比斯在12 如果f(Lr,rg,Xo)* f(Lr,rg,Xf)> 0)
这是功能:
function[Lp,Xo,Xf]=Bis(Lr,rg)
Xo=0;
Xf=10;
Err=0.01;
syms x;
f=inline('(sqrt((2/3)*(((x*Lr)/3)-(x*x)+((2*x*x*x)/Lr)-((2*x*x*x*x)/(Lr*Lr))+(((2*x*x*x*x)/(Lr*Lr))*exp(-Lr/x))))-rg)');
if f(Lr,rg,Xo)*f(Lr,rg,Xf)>0
disp('The values you entered are not apropriate !')
PlotLpFunction;
Lp='unknown';
elseif f(Lr,rg,Xo)*f(Lr,rg,Xf)==0
if f(Lr,rg,Xo)==0
Lp=Xo;
elseif f(Lr,rg,Xf)==0
Lp=Xf;
end
elseif f(Lr,rg,Xo)*f(Lr,rg,Xf)<0
xi=(Xf-Xo)/2;
while abs(f(Lr,rg,xi))>Err
if f(Lr,rg,xi)*f(Lr,rg,Xf)<0
Xo=xi;
xi=(Xo+Xf)/2;
elseif f(Lr,rg,xi)*f(Lr,rg,Xf)>0
Xf=xi;
xi=(Xo+Xf)/2;
end
end
Lp=xi;
end
答案 0 :(得分:2)
代码在最新版本的Matlab上为我执行,而不是我没有PlotLpFunction。
我最初的印象是你忘了将Lr(以及所有其他参数)发送到你的内联函数中,通过将它们作为参数添加到内联函数中非常容易解决。您可以在the official documentation找到完整用法。
相关部分
inline(expr,arg1,arg2,...)
构造一个内联函数,其输入 参数由字符串arg1,arg2,....多字符指定 可以使用符号名称。
但是它似乎在Matlab 2011b和2008b上都可以很好地形成内联,大概来自上下文。答案现在被接受,所以可能是问题所在。其他人可以重现他的问题吗?如果是这样,请提供您的Matlab版本或其他情况。