Вы здесь

Метод хорд

Исходный код на C++: 

Теория

В методе деления пополам отрезок [a,b] делиться на две равные части. В методе хорд деление отрезка [a,b] происходит пропорционально величине ординат f(a) и f(b) в функции f(x). Это и есть единственное отличие этих двух алгоритмов. Точка K есть ничто иное, как пресечение прямой проходящей через две точки A и B с осью абсцисс Ox (рис. 1).

График функции f(x) и стягивающая ее хода
рис. 1. График функции f(x) и стягивающая ее хода.

Запишем уравнение прямой (рис. 2).

Уравнение прямой
рис. 2. Уравнение прямой.

Так как y=0 (пересечение с осью Ox) уравнение имеет следующий вид (рис. 3).

Фиксация точки K
рис. 3. Фиксация точки K.

Программная реализация

double chord(double a, double b, double (*f)(double x), bool *ok = NULL) //метод хорд
{
    if (f(a) * f(b) < 0) {
        if (ok != NULL)
            *ok = true;
    } else {
        if (ok != NULL)
            *ok = false;
        return 0.;
    }
    double k, y;
    while (1) {
        k = a - (f(a)*(b - a)) / (f(b) - f(a));
        if (b - a < 2 * E)
            return k;
        y = f(k);
        if (fabs(y) < Q)
            return k;
        f(a)*f(k) < 0 ? b = k : a = k;
    }
}