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



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")