Untitled
unknown
python
3 years ago
2.5 kB
6
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...