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


import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve, minimize_scalar

B, C, D = -3.327, -7.204, 11.442
def f(x): return x**3 - B*x**2 + C*x - D

# 1. Поиск корней через fsolve
roots = [fsolve(f, x0)[0] for x0 in [-3.5, -1.2, 2.2]]
print(f"Корни (scipy): {roots}")

# 2. Поиск экстремумов
res_min = minimize_scalar(f, bounds=(0, 4), method='bounded')
# Для максимума минимизируем -f(x)
res_max = minimize_scalar(lambda x: -f(x), bounds=(-4, 0), method='bounded')

print(f"Минимум (scipy): x={res_min.x:.4f}")
print(f"Максимум (scipy): x={res_max.x:.4f}")

# 3. Финальный график
x_p = np.linspace(-5, 4, 500)
plt.figure(figsize=(10, 6))
plt.plot(x_p, f(x_p), 'b', label='f(x)')
plt.axhline(0, color='black', lw=1)

# Точки корней
plt.scatter(roots, [0,0,0], color='red', label='Корни')
# Точки экстремумов
plt.scatter([res_min.x, res_max.x], [res_min.fun, -res_max.fun], color='green', marker='s', label='Экстремумы')

plt.title("Финальный график исследования функции (Вариант 6)")
plt.legend()
plt.grid(True)
plt.show()