0

この関数を作成し、rg と Lp の値を既に定義していますが、この関数を実行するとエラーが返されます: (入力引数 "Lr" は未定義です。

f(Lr,rg,Xo)*f(Lr,rg,Xf)>0) の場合、12 で ==> Bi のエラー

ここに機能があります:

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

私が PlotLpFunction を持っていないという事実を除いて、コードは Matlab の最新バージョンで実行されます。

私の最初の印象は、Lr (および他のすべての引数) をインライン化された f 関数に送信するのを忘れていたということでした。それらをインライン関数に引数として追加することで非常に簡単に修正できます。完全な使用方法については、公式ドキュメントを参照してください。

関連する部分は

inline(expr,arg1,arg2,...)入力引数が文字列 arg1、arg2、... で指定されるインライン関数を構築します。複数文字のシンボル名を使用できます。

しかし、おそらくコンテキストから、Matlab 2011b と 2008b の両方でインラインをうまく形成しているようです。回答は現在受け入れられているため、おそらくそれが問題でした。他の誰かが彼の問題を再現できますか? その場合は、Matlab のバージョンまたはその他の状況をお知らせください。

于 2012-08-23T14:20:44.077 に答える