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