0

二分法を見つけるためのコードがあります(そしてそれは最終的に機能します!)が、さらに3つのものを含める必要があります:

  • output-ルート履歴アルゴリズムによって取得された中点のシーケンスを含むベクトル
  • 出力-関数の絶対値
  • rでのf(x)、つまりfRoot = f(r)入力-最大反復

    function [R, E] = myBisection(f, a, b, tol)
        m = (a + b)/2;
        R = m;
        E = abs(f(m));
        while E(end) > tol
            if sign(f(a)) == sign(f(m))
                a = m;
            else
                b = m;
            end
            m = (a + b)/2;
            R = [R, m];
            E = [E, abs(f(m))];
        end
    

どうすればこれを行うことができますか?ありがとう!!

4

1 に答える 1

0

endインデントを修正しました。関数の最後から省略していることがわかります。(オプションですが、これらを省略しないことをお勧めします。これにより、最後まで数行書くつもりはなかったのですが、忘れてしまいました。)

REmyBisectionを適切に呼び出すと、今すぐ返送する必要があります。

[R, E] = myBisection(f, a, b, tol);

電話するだけなら

myBisection(f, a, b, tol)

を返すだけRです。

反復回数に制限を追加するには、次のwhileようにの条件を変更します。

iter=0;
while (E(end) > tol) && (iter<max_iter)
    iter = iter+1;
    % ...

end

ifまたは、プラスを付けてforループで実行することをお勧めしますbreak

for iter=1:max_iter
    if(E(end) <= tol), break, end;
    % ...
end
于 2012-11-19T19:20:39.363 に答える