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


import numpy as np
import matplotlib.pyplot as plt

# Коэффициенты для варианта 16:
# Исходное уравнение: x^3 - B*x^2 + C*x - D = 0, где B = -0.205, C = -10.880, D = 1.469
# После подстановки: x^3 + 0.205*x^2 - 10.880*x - 1.469 = 0
a3 = 1.0
a2 = 0.205
a1 = -10.880
a0 = -1.469

def f(x):
    """Кубическая функция"""
    return a3*x**3 + a2*x**2 + a1*x + a0

def fp(x):
    """Первая производная: f'(x) = 3x^2 + 0.41x - 10.880"""
    return 3*a3*x**2 + 2*a2*x + a1

def fpp(x):
    """Вторая производная: f''(x) = 6x + 0.41"""
    return 6*a3*x + 2*a2

# ----- Нахождение экстремумов аналитически (без золотого сечения) -----
# Решаем квадратное уравнение f'(x) = 0: 3x^2 + 0.41x - 10.880 = 0
A = 3
B_fp = 2*a2    # = 0.41
C_fp = a1      # = -10.880
discriminant = B_fp**2 - 4*A*C_fp

x1 = (-B_fp - np.sqrt(discriminant)) / (2*A)
x2 = (-B_fp + np.sqrt(discriminant)) / (2*A)

# Определяем, где максимум, а где минимум (по знаку второй производной)
if fpp(x1) < 0:
    x_max, x_min = x1, x2
else:
    x_max, x_min = x2, x1

y_max = f(x_max)
y_min = f(x_min)

print("=== Аналитическое нахождение экстремумов (без золотого сечения) ===")
print(f"Максимум: x = {x_max:.8f},  f(x) = {y_max:.8f}")
print(f"Минимум:  x = {x_min:.8f},  f(x) = {y_min:.8f}")

# ----- Корни уравнения -----
coeff = [a3, a2, a1, a0]
roots = np.roots(coeff)
real_roots = [r.real for r in roots if abs(r.imag) < 1e-10]

print("\n=== Корни уравнения f(x) = 0 ===")
for i, r in enumerate(real_roots, 1):
    print(f"x{i} = {r:.8f},  f(x) = {f(r):.2e}")

# ----- Построение графика -----
x_vals = np.linspace(-5, 5, 500)
y_vals = f(x_vals)

plt.figure(figsize=(10, 6))
plt.plot(x_vals, y_vals, 'b-', linewidth=2, label='f(x)')
plt.axhline(0, color='black', linestyle='--', linewidth=0.8, alpha=0.7)
plt.axvline(0, color='black', linestyle='--', linewidth=0.8, alpha=0.7)

# Отмечаем экстремумы
plt.plot(x_max, y_max, 'ro', markersize=8, label='Максимум')
plt.plot(x_min, y_min, 'bo', markersize=8, label='Минимум')

# Отмечаем корни
for i, r in enumerate(real_roots):
    plt.plot(r, 0, 'gx', markersize=10, label='Корень' if i == 0 else '')

plt.grid(True, alpha=0.3)
plt.title("Кубическая функция: экстремумы и корни (вариант 16)")
plt.xlabel('x')
plt.ylabel('f(x)')
plt.legend()
plt.tight_layout()
plt.show()