Систематический вид матрицы Gsys=[I_k | P] Python
I_k - единичная матрица kxk, P- проверочная подматрица. Допустим я ввожу матрицу [[1,1,1,0],[0,0,1,1]]. чтобы привести матрицу к систематическому виду нужно поменять 2 и 4 столбцы местами [[1,0,1,1],[0,1,1,0]].
Все задание:
1.Вводите матрицу.
2.Программа по матрице определяет параметры n-количество столбцов,k-колличество строк
3.Матрица приводится к систематическому виду
Задание само простое,но я не могу никак придумать логику для обмена столбцов местами друг с другом, пытался сделать сам, но именно с 3-м пунктом возникли серьезные проблемы. Помогите пожалуйста. писал это но не выводит нужный результат
def to_systematic_form(matrix):
"""
Приведение матрицы к систематическому виду.
"""
if not is_systematic(matrix):
# Приведение к систематическому виду (элементарные преобразования строк)
for i in range(matrix.shape[0]):
# Ищем первый ненулевой элемент в строке
pivot_col = np.argmax(matrix[i, :])
# Если элемент не в первом столбце, меняем строки местами
if pivot_col != i:
matrix[:, [i, pivot_col]] = matrix[:, [pivot_col, i]]
# Нормализация строки, чтобы получить 1 в лидирующем элементе
pivot_inv = int(np.linalg.inv([[matrix[i, i]]])[0, 0]) % 2
matrix[i, :] = (matrix[i, :] * pivot_inv) % 2
# Обнуление всех остальных элементов столбца
for j in range(matrix.shape[0]):
if i != j:
matrix[j, :] = (matrix[j, :] + matrix[j, i] * matrix[i, :]) % 2
return matrix
Вывод:
1 1 1 0
0 0 1 1
Параметры n и k: n=2, k=4
Матрица в систематическом виде:
[[1 0 1 1]
[0 1 0 1]]
Должно быть: [[1 0 1 1] [0 1 1 0]]