Как найти линейно независимые векторы, принадлежащие нулевому пространству неквадратной матрицы?(Python) - PullRequest
0 голосов
/ 07 октября 2018

У меня есть неквадратная матрица и метод определения пустого пространства матрицы (найден в этой теме: Как найти пустое пространство матрицы в Python, используя numpy? ),но у меня есть несколько проблем с этим решением.

Во-первых, я не уверен, правильные ли у меня значения, так как я не слишком уверен, что я ищу.

Во-вторых, мне нужно найти два линейно независимых вектора из этого нулевого пространства, но я не знаю следующего шага, чтобы определить это.

Наконец, мне нужно определить, являются ли какие-либо столбцы матрицы линейно независимыми в R3 и R4.

Любая помощь будет принята с благодарностью.

Код:

import numpy as np
import scipy as sp
from scipy import linalg

a = np.matrix(
[
    [ 3,  2, -1,  4],
    [ 1,  0,  2,  3],
    [-2, -2,  3, -1]
])


def null(A, eps=1e-15):
    u, s, vh = linalg.svd(A)
    null_mask = (s <= eps)
    null_space = sp.compress(null_mask, vh, axis=0)
    return sp.transpose(null_space)

print(null(a))

Вывод:

 [[ 0.8290113 ]
 [-0.2330726 ]
 [ 0.24969281]
 [-0.44279897]]

Я предполагаю, поскольку вывод - это что-то, кроме пустой матрицы [], что в этом есть что-то особенноематрица, я просто не знаю, что это значит.

1 Ответ

0 голосов
/ 07 октября 2018

Я бы рекомендовал использовать 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]])]

, которые являются первыми двумястолбцы матрицы.

...