Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- def kramer_solver(coeff_matrix, constant_vector):
- n = len(coeff_matrix)
- # Вычисляем определитель исходной матрицы
- det_A = np.linalg.det(coeff_matrix)
- if abs(det_A) < 1e-10:
- raise ValueError("Матрица коэффициентов вырожденная, метод Крамера не применим.")
- solutions = []
- for i in range(n):
- # Создаем копию матрицы коэффициентов и заменяем i-ый столбец на вектор констант
- modified_matrix = coeff_matrix.copy()
- modified_matrix[:, i] = constant_vector
- # Вычисляем определитель модифицированной матрицы
- det_modified = np.linalg.det(modified_matrix)
- # Находим решение для i-ой переменной
- x_i = det_modified / det_A
- solutions.append(x_i)
- return solutions
- n = int(input("Задайте порядок системы: "))
- matrixa = []
- matrixb = [] # free cf
- for i in range(n):
- tmp = []
- while len(tmp) != n:
- tmp = list(map(int, input("Введите через пробел коэффициенты строки " + str(i+1) + ": ").split()))
- if len(tmp) != n:
- print("Количество коэффициентов должно быть равно порядку системы")
- matrixa.append(tmp)
- for i in range(n):
- matrixb.append(int(input("Введите свободный коэффициент строки " + str(i+1) + ": ")))
- matrixa = np.array(matrixa)
- matrixb = np.array(matrixb)
- try:
- solutions = kramer_solver(matrixa, matrixb)
- print("Решение системы уравнений:")
- for i, solution in enumerate(solutions):
- print(f"x_{i + 1} = {round(solution, 3)}")
- except ValueError as e:
- print(e)
Advertisement
Add Comment
Please, Sign In to add comment