Многие корневые искатели позволяют пользователю указывать начальную точку или точки для начала поиска. Это позволяет пользователям пытаться «поиграть» с результатами, чтобы найти разные корни, или позволить искателю сходиться к корню.
Если нет смысла разрешать пользователю указывать начальные значения, вы можете начать с определения нескольких точек:
- -1, 0, 1
- -10, 0, 10
- -100, 0, 100
- и т.д.
Если входные данные являются нечетным полиномом, это в конечном итоге обнаружит подходящий диапазон для деления пополам. Если вход является четным полиномом, вы можете никогда не поймать изменения знака (рассмотрите f (x) = x ^ 2 - он никогда не будет отрицательным), поэтому будьте готовы сдаться после определенного (настраиваемого?) Количества проб.
Я предложил увеличить диапазоны на 10 степеней здесь; поскольку метод деления пополам каждый раз сокращает диапазон пополам, возможно, это слишком консервативный подход. (Потребуется от двух до трех итераций деления пополам, чтобы уменьшить диапазон до следующей «более жесткой» скобки.) Возможно, лучше было бы увеличить прыжки:
- -10, 0, 1
- -1000, 0, 1000
- -100000, 0, 100000
- и т.д.
Это будет выполнять меньше зондов, но потребует больше деления пополам. Попробуйте несколько полиномов и проследите время выполнения для поиска корней с обоими предложениями.