Для непрерывной функции есть простой алгоритм поиска локальных минимумов.
Допустим, что уже найдены точки a < b < c такие, что f(a) > f(b) < f(c).
Добавляем точки d=(a+b)/2, e=(b+c)/2, и выбираем точку из b,d,e, значение на которой минимально. Она даст тройку (d,b,e), (a,d,b) или (b,e,c) соответственно, обладающую теми же свойствами, что и исходная тройка, но в 2 раза уже.
Для поиска исходных точек надо просмотреть прямую с достаточно мелким шагом, чтобы впадина не могла спрятаться между точками. Шаг не обязан быть равномерным, поэтому даже для бесконечной прямой может хватить конечного числа точек.