Как показать все середины в моем коде бисекции?
У меня есть код для поиска деления пополам (и это наконец работает!), Но мне нужно включить еще 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