суббота, 12 мая 2012 г.

Тернарный поиск с золотым сечением

Тернарный поиск с использованием золотого сечения для поиска минимума выпуклой вниз функции
 
double gts(double l, double r, double eps) {
    final double phi = (1 + Math.sqrt(5.0)) / 2;
    final double resphi = 2 - phi;
    double x1 = l + resphi * (r - l);
    double x2 = r - resphi * (r - l);
    double f1 = f(x1);
    double f2 = f(x2);
    
    do {
        if (f1 < f2) {
            r = x2;
            x2 = x1;
            f2 = f1;
            x1 = l + resphi * (r - l);
            f1 = f(x1);
        } else {
            l = x1;
            x1 = x2;
            f1 = f2;
            x2 = r - resphi * (r - l);
            f2 = f(x2);
       }
    } while (Math.abs(r - l) > eps);
    return (x1 + x2) / 2
}

Комментариев нет:

Отправить комментарий