0

我有一个找到二等分的代码(它终于起作用了!),但我需要再包括 3 件事:

  • output- Root History 包含算法获得的中点序列的向量
  • 输出——函数的绝对值
  • f(x) 在 r 处,即 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从函数的末尾遗漏了。(这是可选的,但最好不要遗漏这些东西,这样你就知道你并不是要写几行到最后,但你忘记了。)

R并且E现在应该返回,如果你适当地调用 myBisection ,那就是

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

如果你只是打电话

myBisection(f, a, b, tol)

它只会返回R

要添加对迭代次数的限制,您可以while像这样更改 's 条件:

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

end

或者最好在 for 循环中使用if加号break

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