Untitled
unknown
python
2 years ago
2.5 kB
5
Indexable
import sys import os import math # Класс Matrix class Matrix: def __init__(self, matrix): # Инициализация свойств матрицы self.m = len(matrix) self.n = len(matrix[0]) self.matrix = matrix # Вывод матрицы def __str__(self): nl = '\n' # Обход ограничения f-строк на использование обратных слешей return f"{nl.join([' '.join([str(j).rjust(3, ' ') for j in i]) for i in self.matrix])}" # Определяем сеттер def __setitem__(self, key, value): self.matrix[key] = value # Определяем геттер def __getitem__(self, key): return self.matrix[key] def det(self): res, koef = 1, 1 for i in range(self.n): # выбираем опорный элемент j = max(range(i,self.n), key=lambda k: abs(self[k][i])) if i != j: self[i],self[j] = self[j],self[i] res *= -1 # убеждаемся, что матрица не вырожденная if self[i][i] == 0: return 0 res *= self[i][i] # "обнуляем" элементы в текущем столбце for j in range(i+1,self.n): gcd = math.gcd(self[i][i], self[j][i]) b1 =self[j][i]//gcd b2 = self[i][i]//gcd koef *= b2 self[j] = [b2*self[j][k]-b1*self[i][k] for k in range(self.n)] print(f'{b2}*({j+1}) – {b1}*({i+1})') print(self) return res//koef # Функция для считывания данных def read_file(): if len(sys.argv) > 1 and os.path.exists(sys.argv[1]): with open(sys.argv[1]) as f: return f.read() else: while True: print('Передайте название файла аргументом в командную строку: ', end='') file_name = input() if os.path.exists(file_name): with open(file_name) as f: try: return [[int(num) for num in st.strip().split(' ')] for st in f.readlines()[1::]] except: print("Содержимое файла невалидно") matrix = Matrix(read_file()) print(matrix) print(f"Определитель равен: {matrix.det()}")
Editor is loading...