Это процесс «разделяй и властвуй».
Конечные точки (a, f (a)) и (b, f (b)) делят ось Y на три области с горизонтальными границами наf (a) и f (b).wlog Я ограничу обсуждение первым квадрантом, предполагая, что f (b)> f (a)
|
|
f(b)-+-------------------------*-----------
|
|
|
|
f(a)-+-*-----------------------------------
|
|
+-a-------r--------s------b-----
Примите два других значения, 'r' и 's', такие что a < r < s < b
.Поскольку существует не более одной точки перегиба, существуют некоторые ограничения на различные возможности для f (r) и f (s), упорядоченных по конечным точкам.
Если оба меньше f (b), томаксимальная точка должна быть справа от s
, интервал [s, b].
Если f (r) велико, то так же, как и f (s).
f (r)> f (s)> f (b) означает, что max находится в интервале [a, s]
f (s)> f (r)> f (b) означает, что max находится в интервале [r, b]
Оставшийся случай - это f (a) f (b).Опять же, мы получаем, что максимум должен быть справа от f (r), второй точки в предыдущем случае, интервал [r, b].
После этого определения итерируем оставшийся интервал.Для [a, s] или [r, b] у нас уже есть одна точка в интервале;выберите еще один в большую сторону (если два одинакового размера, выберите любой);для [s, b] нам нужно еще две точки.
Упрощенный способ выбора точек состоит в том, чтобы просто разделить пополам или разделить на три части рассматриваемый интервал.Если вы хотите попробовать что-то более изощренное, используйте свою историю точек, чтобы приблизить функцию (например, подгонка сплайнов) и выберите точки, чтобы быстрее сходиться.
Это вас заводит?