Advertisement
myloyo

№6 Приложения метода Гаусса

Nov 21st, 2024 (edited)
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. import numpy as np
  2.  
  3.  
  4. def print_matrix(matrix):
  5.     print(np.array_str(matrix, precision=5, suppress_small=True))
  6.  
  7. def gauss(A):
  8.     A = np.array(A, dtype=float)
  9.     n, m = A.shape
  10.  
  11.     # Прямой ход
  12.     for i in range(n):
  13.         max_row = i + np.argmax(np.abs(A[i:, i]))
  14.         A[[i, max_row]] = A[[max_row, i]]
  15.  
  16.         div = A[i, i]
  17.         A[i] /= div
  18.  
  19.         for j in range(i + 1, n):
  20.             factor = A[j, i]
  21.             A[j] -= factor * A[i]
  22.  
  23.     print(f"\nМатрица после прямого хода:")
  24.     print_matrix(A)
  25.  
  26.     # Обратный ход
  27.     for j in range(n - 1, -1, -1):
  28.         for i in range(j - 1, -1, -1):
  29.             d = A[i, j] / A[j, j]
  30.             A[i, j:] -= A[j, j:] * d
  31.  
  32.     print("Обратный ход метода Гаусса:")
  33.     print_matrix(A)
  34.     print()
  35.  
  36.     s = [round(A[i, -1] / A[i, i], 4) for i in range(n)]
  37.     print("Решение СЛАУ:")
  38.     print(*s)
  39.  
  40.     return A
  41.  
  42.  
  43. def determinant(A):
  44.     A = np.array(A, dtype=float)
  45.     n = A.shape[0]
  46.     det = 1
  47.     for j in range(n):
  48.         if A[j, j] == 0:
  49.             return 0  # Если на диагонали 0, то матрица вырождена
  50.         det *= A[j, j]
  51.         for i in range(j + 1, n):
  52.             if A[i, j] != 0:
  53.                 d = A[i, j] / A[j, j]
  54.                 A[i, j:] -= A[j, j:] * d
  55.     return det
  56.  
  57.  
  58. def inverse_matrix(A):
  59.     n = len(A)
  60.     A = np.array(A, dtype=float)
  61.     inv_A = np.hstack([A, np.eye(n)])
  62.     res_A = gauss(inv_A)
  63.     return res_A[:, n:]
  64.  
  65.  
  66. A = np.array([
  67.     [7, 0, 1, 2],
  68.     [5, 4, 3, 8],
  69.     [1, 2, 3, 4],
  70.     [5, 2, 2, 5]])
  71.  
  72. det = determinant(A)
  73. print(f"\nОпределитель: {det:0.4f}")
  74.  
  75. inv_A = inverse_matrix(A)
  76. print("\nОбратная матрица:")
  77. for row in inv_A:
  78.     print(" ".join([f"{x:0.4f}" for x in row]))
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement