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


import numpy as np

# --- Создаём input.txt (если свой файл, закомментируй этот блок и загрузи его) ---
with open("input.txt", "w") as f:
    f.write("1 2 1 7\n2 2 -1 3\n1 -1 4 0\n")

# --- Читаем A и B из файла ---
data = np.loadtxt("input.txt")
A = data[:, :-1]
B = data[:, -1]
n = len(B)
print("A =\n", A)
print("B =", B)

# --- Метод Крамера ---
def cramer(A, B):
    D = np.linalg.det(A)
    print(f"Δ = {D:.4f}")
    if abs(D) < 1e-12:
        print("Δ = 0, Крамер не применим")
        return None
    x = []
    for i in range(len(B)):
        Ai = A.copy()
        Ai[:, i] = B
        Di = np.linalg.det(Ai)
        print(f"Δ{i+1} = {Di:.4f}")
        x.append(Di / D)
    return np.array(x)

# --- Метод Гаусса ---
def gauss(A, B, verbose=True):
    M = np.hstack([A, B.reshape(-1, 1)]).astype(float)
    n = len(B)
    # прямой ход
    for i in range(n):
        p = i + np.argmax(abs(M[i:, i]))
        if abs(M[p, i]) < 1e-12:
            print("Система вырождена")
            return None
        if p != i:
            M[[i, p]] = M[[p, i]]
        M[i] = M[i] / M[i, i]
        for j in range(i + 1, n):
            M[j] = M[j] - M[j, i] * M[i]
        if verbose:
            print(f"\nШаг {i+1}:\n{np.round(M, 4)}")
    # обратный ход
    x = np.zeros(n)
    for i in range(n - 1, -1, -1):
        x[i] = M[i, -1] - np.dot(M[i, i+1:n], x[i+1:])
    return x

print("\n=== Крамер ===")
xc = cramer(A, B)
print("x =", np.round(xc, 4))

print("\n=== Гаусс ===")
xg = gauss(A, B)
print("\nx =", np.round(xg, 4))

# --- Проверка ---
print("\nПроверка A·x = B:", np.allclose(A @ xg, B))
print("Numpy:", np.round(np.linalg.solve(A, B), 4))