0

我已经编写了这个函数,并且我已经定义了 rg 和 Lp 的值,但是当我运行这个函数时它仍然返回错误:(输入参数“Lr”未定义。

如果 f(Lr,rg,Xo)*f(Lr,rg,Xf)>0),则 ==> Bis 在 12 处出错

这是功能:

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
4

1 回答 1

2

代码在最新版本的 Matlab 上为我执行,除了我没有 PlotLpFunction 的事实。

我最初的印象是您忘记将 Lr(和所有其他参数)发送到您的内联 f 函数中,通过将它们作为参数添加到内联函数很容易修复。您将在官方文档中找到完整的用法。

相关部分是

inline(expr,arg1,arg2,...)构造一个内联函数,其输入参数由字符串 arg1, arg2,.... 指定。可以使用多字符符号名称。

但从上下文来看,它似乎在 Matlab 2011b 和 2008b 上本身就可以很好地形成内联。答案现在被接受了,所以大概这就是问题所在。其他人可以重现他的问题吗?如果是,请提供您的 Matlab 版本或其他情况。

于 2012-08-23T14:20:44.077 回答