keker123

Метод Крамера

Sep 19th, 2023
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.94 KB | None | 0 0
  1. import numpy as np
  2.  
  3.  
  4. def kramer_solver(coeff_matrix, constant_vector):
  5.     n = len(coeff_matrix)
  6.  
  7.     # Вычисляем определитель исходной матрицы
  8.     det_A = np.linalg.det(coeff_matrix)
  9.  
  10.     if abs(det_A) < 1e-10:
  11.         raise ValueError("Матрица коэффициентов вырожденная, метод Крамера не применим.")
  12.  
  13.     solutions = []
  14.  
  15.     for i in range(n):
  16.         # Создаем копию матрицы коэффициентов и заменяем i-ый столбец на вектор констант
  17.         modified_matrix = coeff_matrix.copy()
  18.         modified_matrix[:, i] = constant_vector
  19.  
  20.         # Вычисляем определитель модифицированной матрицы
  21.         det_modified = np.linalg.det(modified_matrix)
  22.  
  23.         # Находим решение для i-ой переменной
  24.         x_i = det_modified / det_A
  25.         solutions.append(x_i)
  26.  
  27.     return solutions
  28.  
  29.  
  30. n = int(input("Задайте порядок системы: "))
  31. matrixa = []
  32. matrixb = []  # free cf
  33. for i in range(n):
  34.     tmp = []
  35.     while len(tmp) != n:
  36.         tmp = list(map(int, input("Введите через пробел коэффициенты строки " + str(i+1) + ": ").split()))
  37.         if len(tmp) != n:
  38.             print("Количество коэффициентов должно быть равно порядку системы")
  39.     matrixa.append(tmp)
  40. for i in range(n):
  41.     matrixb.append(int(input("Введите свободный коэффициент строки " + str(i+1) + ": ")))
  42.  
  43. matrixa = np.array(matrixa)
  44. matrixb = np.array(matrixb)
  45.  
  46. try:
  47.     solutions = kramer_solver(matrixa, matrixb)
  48.     print("Решение системы уравнений:")
  49.     for i, solution in enumerate(solutions):
  50.         print(f"x_{i + 1} = {round(solution, 3)}")
  51. except ValueError as e:
  52.     print(e)
  53.  
Advertisement
Add Comment
Please, Sign In to add comment