Разделение пополам работает, беря конечные точки некоторого начального интервала [a,b]
и находя, какая половина интервала должна содержать корень (он оценивает среднюю точку и определяет, какая половина имеет изменение знака). Затем процесс пополам повторяется на идентифицированной половине.
Разделение пополам сходится только к одному возможному корню, и если ваша функция имеет несколько корней внутри [a,b]
, вообще сложно предсказать, к какому конкретному корню она будет сходиться. (Примечание: поскольку деление пополам является полностью детерминированным алгоритмом, он всегда будет сходиться к одному и тому же корню, если вы зададите ему один и тот же начальный интервал.) Итерации просто уточняют вашу аппроксимацию найденного корня, они не находят несколько корней.
Чтобы прямо ответить на ваш вопрос, bisection не обнаружит все три корня вашей функции внутри [0,3]
. Он найдет только один корень, и это определяется последней итерацией вашего кода деления пополам. Все значения, выдаваемые итерациями деления пополам, просто показывают продвижение алгоритма к одному корню, который он в итоге нашел (и эти значения должны представлять собой последовательность, сходящуюся к конечному значению).
person
Sam
schedule
08.11.2012
fzero
? Также обратите внимание на эту функцию обмена файлами -- Вы многому научитесь. - person Rody Oldenhuis   schedule 08.11.2012