Как показать все середины в моем коде бисекции?

У меня есть код для поиска деления пополам (и это наконец работает!), Но мне нужно включить еще 3 вещи:

  • output- Root History вектор, содержащий последовательность средних точек, полученных по алгоритму
  • output- абсолютное значение функции
  • 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
    

Как мне это сделать? Спасибо!!

1 ответ

Решение

Я исправил отступы, и вы можете видеть, что вы пропустили end с конца функции. (это необязательно, но лучше не пропускать эти вещи, чтобы вы знали, что не хотели писать пару строк до конца, но забыли об этом.)

R а также E должен быть возвращен сейчас, если вы вызываете myBisection соответственно, то есть

[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 плюс break:

for iter=1:max_iter
    if(E(end) <= tol), break, end;
    % ...
end
Другие вопросы по тегам