1

こんにちは皆さん、以下に示すように、アルゴリズムのプログラミング コードを作成する際に問題が発生しました。

このプログラムは、(現在の近似値 - 前回の近似値)/現在の近似値として定義される近似誤差が 0.01 未満になると終了します。(f(xr)i+1 - f(xr)i)/f(xr)i+1 と簡略化できます。以下は私が書いたコードです。上記の状況が満たされたときに停止する反復をプログラムする方法を知りたいです。

xl = input('Enter lower limit : ');

xu = input('Enter upper limit : ');

xr = (xl+xu)/2;

R = 3; V = 30;

fl = (pi*R*xl^2)-(pi*(xl^3)/3)-V;    % between is there anyway can call these functions 

fu = (pi*R*xu^2)-(pi*(xu^3)/3)-V;      other than typing 3 times

fh = (pi*R*xr^2)-(pi*(xr^3)/3)-V;


while relative error is less than 0.01 then display value of xr

if fl*fu<0

    xu = xr;


elseif fl*fu>0

    xl = xr;


end

end
4

3 に答える 3

0

手順3(c)の実装を忘れました。

また、手順3(a)および3(b)の手順にあるように、「手順2に戻る」こともしませんでした。これを行うには、ここでwhile説明するようにループを作成する必要があります。whileループに、ループを維持する条件を設定します。その条件がfalseと評価された場合、ステップ3(c)に従ってループから脱落する必要があります。

CONTINUEを使用して、ステップ3(a)および3(b)の「ステップ2に戻る」の部分を実行します。これにより、実行がループの先頭に戻ります。MATLABのJumpコマンドも参照してください。

幸運を。

于 2013-03-04T16:28:30.847 に答える
0

関数に計算を入れることができます:

function f = some_function(x)
    R = 3;
    V = 30;
    f = (pi*R*x^2)-(pi*(x^3)/3)-V; 

あなたは100パスで試すことができます(安全のために):

for i=1:100
    xr_old = xr
    fr_old = fr

    xr = (xl+xu)/2;
    fr = some_function(xr);

    if abs((xr - xr_old)/xr) < MIN_STEP
        break
    end

    temp = fl*fr
    if temp < 0:
        xu = xr
        fu = fr
    else if temp > 0:
        xl = xr
        fl = fr
    end
end
于 2013-03-04T16:31:26.037 に答える
0

実行できるようになったので、コードを更新しました。f(x)=x^2-2 でテストしました。6 回の反復で 1.4141 に収束します。そのコードを、以前は機能していなかったものを理解するために必要なものと比較することをお勧めします。これは良い学習体験になります。

>> example(1,2);
Crossing found after 6 iterations: 1.414062

example.m は次のとおりです。

function xr = root(xl,xu)

MAX_NUMBER_ITERATIONS = 1000;
MAX_DELTA=.01;

numberIterations=0;
xr_old=xu;
xr = (xl+xu)/2;

while ((numberIterations<MAX_NUMBER_ITERATIONS) & (abs(xr_old-xr)>=MAX_DELTA))
    numberIterations=numberIterations+1;
    xr_old = xr;;

    product=f(xl)*f(xr);
    if product<0
        xu = xr;
        xr = (xl+xu)/2;
        continue;  
    elseif product>0
        xl = xr;
        xr = (xl+xu)/2;
        continue;
    else
        break;
    end
end
fprintf('Crossing found after %d iterations: %f\n',numberIterations,xr)

end


function y = f(x)
y=x^2-2;
end
于 2013-03-04T16:33:15.390 に答える