import numpy as np
eps = 0.001
# 1. Приведенная форма X = AX + D
A = np.array([
[0, 1/5, -2/5],
[-1/3, 0, 1/6],
[1/7, -1/7, 0]
])
D = np.array([8/5, 11/6, 22/7])
print("1. Матрица A:")
print(A)
print("Вектор D:")
print(D)
# 2. Проверка сходимости
print("\n2. Проверка сходимости:")
s1 = abs(A[0, 1]) + abs(A[0, 2])
s2 = abs(A[1, 0]) + abs(A[1, 2])
s3 = abs(A[2, 0]) + abs(A[2, 1])
print("Суммы по строкам:", s1, s2, s3)
if max(s1, s2, s3) < 1:
print("Условие сходимости выполняется")
else:
print("Условие сходимости не выполняется")
# 3. Метод простых итераций
x = D.copy()
k1 = 0
while True:
x_new = A @ x + D
k1 += 1
if max(abs(x_new - x)) < eps:
x = x_new
break
x = x_new
print("\n3. Метод простых итераций:")
print("x =", x)
print("Количество итераций:", k1)
# 4. Метод Зейделя
x = D.copy()
k2 = 0
while True:
old = x.copy()
x[0] = 8/5 + x[1]/5 - 2*x[2]/5
x[1] = 11/6 - x[0]/3 + x[2]/6
x[2] = 22/7 + x[0]/7 - x[1]/7
k2 += 1
if max(abs(x - old)) < eps:
break
print("\n4. Метод Зейделя:")
print("x =", x)
print("Количество итераций:", k2)
# 5. Сравнение методов
print("\n5. Сравнение методов:")
print("Простые итерации:", k1, "итераций")
print("Метод Зейделя:", k2, "итераций")
if k1 < k2:
print("Метод простых итераций быстрее")
elif k2 < k1:
print("Метод Зейделя быстрее")
else:
print("Количество итераций одинаковое")
# 6. Проверка подстановкой
print("\n6. Проверка подстановкой:")
print("5x - y + 2z =", 5*x[0] - x[1] + 2*x[2])
print("2x + 6y - z =", 2*x[0] + 6*x[1] - x[2])
print("-x + y + 7z =", -x[0] + x[1] + 7*x[2])
print("Должно получиться: 8, 11, 22")