Я бы рекомендовал использовать sympy в этом случае:
from sympy import Matrix
a = Matrix([
[ 3, 2, -1, 4],
[ 1, 0, 2, 3],
[-2, -2, 3, -1]
])
print(a.nullspace())
Вывод:
[Matrix([
[ -2],
[7/2],
[ 1],
[ 0]]),
Matrix([
[ -3],
[5/2],
[ 0],
[ 1]])]
Вы можете легко проверить, что результат действительно принадлежит пустому пространствупутем явной проверки, что он отображается на 0 при умножении на матрицу a
:
n1, n2 = a.nullspace()
print(a*n1, a*n2)
приводит к:
Matrix([[0], [0], [0]]) Matrix([[0], [0], [0]])
Наконец, чтобы получить линейно независимые столбцы вашей матрицыв R3 вы можете использовать функцию columnspace
, которая возвращает список векторов столбцов, которые охватывают пространство столбцов матрицы
print(a.columnspace())
приводит к
[Matrix([
[ 3],
[ 1],
[-2]]), Matrix([
[ 2],
[ 0],
[-2]])]
, которые являются первыми двумястолбцы матрицы.