Я ищу алгоритмы поиска корней, которые используют очень мало вычислений функций (цель - минимум). Задача поиска корней имеет следующие характеристики:
f(x) = 0, R -> R
- оценка функции (
f(.)
) чрезвычайно затратна*; - для начала доступен ограничивающий интервал (
[a,b]
) (относительно хорошее приближение, а не дикое предположение); f(.)
непрерывен;f(.)
дифференцируема (аналитическая производная недоступна);- известно, что только один корень лежит в пределах начального интервала (
[a,b]
); - плавно меняющееся
f(.)
(от функции не ожидается ничего экстремального); - допустимые критерии остановки, т.е.
|f(x)| < 1e-2
достаточно.
* Мы можем с уверенностью предположить, что любое вычисление, выполненное алгоритмом, ничтожно мало по сравнению с единственной оценкой f(.)
. Таким образом, экономия даже одной оценки функции является значительным преимуществом.
Учитывая это, какие алгоритмы наиболее эффективны для поиска корня с наименьшим количеством вычислений функции?
На основе fzero
Matlab и root-finding functions
, метод Брента кажется наиболее популярным, хотя может существовать более эффективный алгоритм для конкретной задачи. описано выше.
Также приветствуются ссылки на книги и обзорные статьи.