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 # Производная для метода касательных
# Метод 1: Половинное деление (интервал [-4.0, -3.5])
def bisection(a, b, eps):
while (b - a) / 2 > eps:
mid = (a + b) / 2
if f(a) * f(mid) < 0: b = mid
else: a = mid
return (a + b) / 2
# Метод 2: Касательных / Ньютона (интервал [-1.5, -1.0])
def newton(x0, eps):
x = x0
for _ in range(100):
x_new = x - f(x) / df(x)
if abs(x_new - x) < eps: return x_new
x = x_new
return x
# Метод 3: Простых итераций (интервал [2.0, 2.5])
def simple_iteration(x0, eps):
# Приведем к виду x = g(x). Возьмем g(x) = x - f(x)/M, где M - константа
M = 40
x = x0
for _ in range(1000):
x_new = x - f(x) / M
if abs(x_new - x) < eps: return x_new
x = x_new
return x
print(f"Корень 1 (бисекция): {bisection(-4.0, -3.5, EPS):.4f}")
print(f"Корень 2 (касательные): {newton(-1.5, EPS):.4f}")
print(f"Корень 3 (итерации): {simple_iteration(2.0, EPS):.4f}")