Загрузка данных


def f(x):
    return x**3 - 1.98*x**2 - 9.587*x + 6.178

def find_min_quadrisection(f, a, b, e=0.001, max_iter=1000):
    """
    Поиск минимума функции на отрезке [a, b] методом деления на 4 части.
    Предполагается, что функция унимодальна на отрезке.
    """
    for _ in range(max_iter):
        length = b - a
        if length < e:
            # Достигнута заданная точность
            return (a + b) / 2

        # Точки, делящие отрезок на 4 равные части
        x1 = a + length / 4
        x2 = a + length / 2
        x3 = a + 3 * length / 4

        f1, f2, f3 = f(x1), f(x2), f(x3)

        # Определяем, в каком подинтервале находится минимум
        if f1 <= f2 and f1 <= f3:
            # Минимум в левом подинтервале [a, x2]
            b = x2
        elif f2 <= f1 and f2 <= f3:
            # Минимум в среднем подинтервале [x1, x3]
            a = x1
            b = x3
        else:  # f3 минимальное
            # Минимум в правом подинтервале [x2, b]
            a = x2

    # Если превышено максимальное число итераций, возвращаем середину
    return (a + b) / 2

# Поиск минимума на отрезке [-5, 5]
min_x = find_min_quadrisection(f, -5, 5)
print(f"Точка минимума: {min_x:.8f}")
print(f"Значение функции в минимуме: {f(min_x):.8f}")