import numpy as np
import matplotlib.pyplot as plt
x0 = 0.25
epsilon = 1e-15
N_max = 10**6
# === ВАША ФУНКЦИЯ ===
def phi(x):
return 5 / (x**2 + 2*x + 5)
def f(x):
return x - phi(x)
def dphi(x):
denom = (x**2 + 2*x + 5)**2
return -10 * (x + 1) / denom # φ'(x) = -10(x+1)/(x²+2x+5)²
x_check = np.linspace(0, 0.5, 500)
q = np.max(np.abs(dphi(x_check)))
print(f" Проверка сходимости на [0; 0.5]: max |φ'(x)| = {q:.4f}")
print(f" Условие |φ'(x)| < 1 ВЫПОЛНЕНО (q ≈ {q:.3f})")
x_history = [x0]
f_history = [f(x0)]
n = 0
while n < N_max:
x_next = phi(x_history[-1])
f_val = f(x_next)
x_history.append(x_next)
f_history.append(f_val)
n += 1
if abs(f_val) < epsilon:
print(f"Критерий останова достигнут на шаге n = {n}")
break
x_star = x_history[-1]
print(f"\nРЕЗУЛЬТАТ: x* = {x_star:.16f}, |f(x*)| = {abs(f_history[-1]):.2e}")
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))
x_plot = np.linspace(-0.2, 0.8, 400)
ax1.plot(x_plot, x_plot, 'k--', linewidth=2, label='y = x')
ax1.plot(x_plot, phi(x_plot), 'b-', linewidth=2, label='y = φ(x)')
ax1.plot(x_star, x_star, 'ro', markersize=10, label=f'Корень ≈ {x_star:.5f}')
ax1.set_xlabel('x'); ax1.set_ylabel('y')
ax1.legend(); ax1.grid(True, alpha=0.5)
ax1.set_title('1. Графическое отделение корня')
cob_x, cob_y = [], []
steps = min(30, len(x_history)-1)
for i in range(steps):
cob_x.append(x_history[i])
cob_y.append(x_history[i])
cob_x.append(x_history[i])
cob_y.append(x_history[i+1])
cob_x.append(x_history[i+1])
cob_y.append(x_history[i+1])
ax2.plot(x_plot, x_plot, 'k--', linewidth=1, alpha=0.4, label='y = x')
ax2.plot(x_plot, phi(x_plot), 'b-', linewidth=2, label='y = φ(x)')
ax2.plot(cob_x, cob_y, 'r-', linewidth=1.5, label='Итерации')
ax2.plot(x_history[0], x_history[0], 'go', markersize=8, label=f'Старт: x₀={x0}')
ax2.plot(x_star, x_star, 'mo', markersize=8, label=f'Финиш: x*')
ax2.set_xlim(0.2, 0.45)
ax2.set_ylim(0.2, 0.45)
ax2.set_xlabel('x'); ax2.set_ylabel('y')
ax2.legend(fontsize=9); ax2.grid(True, alpha=0.5)
ax2.set_title('2. Сходимости к корню')
plt.tight_layout()
plt.show()