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


B, C, D = -3.327, -7.204, 11.442
EPS = 0.001

def f(x): return x**3 - B*x**2 + C*x - D
def df(x): return 3*x**2 - 2*B*x + C

# Максимум: Золотое сечение
def golden_max(a, b, eps):
    phi = (1 + 5**0.5) / 2
    while abs(b - a) > eps:
        x1 = b - (b - a) / phi
        x2 = a + (b - a) / phi
        if f(x1) < f(x2): a = x1
        else: b = x2
    return (a + b) / 2

# Минимум: Деление пополам для производной (f'=0)
def bisection_min(a, b, eps):
    while (b - a) > eps:
        mid = (a + b) / 2
        if df(mid) > 0: b = mid
        else: a = mid
    return (a + b) / 2

x_max = golden_max(-4, 0, EPS)
x_min = bisection_min(0, 4, EPS)

print(f"Максимум: x = {x_max:.4f}, f(x) = {f(x_max):.4f}")
print(f"Минимум: x = {x_min:.4f}, f(x) = {f(x_min):.4f}")