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}")