Я пытаюсь найти пустое пространство (пространство решений Ax = 0) заданной матрицы. Я нашел два примера, но я не могу заставить себя работать. Более того, я не могу понять, что они делают, чтобы добраться туда, поэтому я не могу отлаживать. Я надеюсь, что кто-то сможет пройти меня через это.Python (NumPy, SciPy), нахождение нулевого пространства матрицы
Страницы документации (numpy.linalg.svd
и numpy.compress
) непрозрачны для меня. Я научился это делать, создав матрицу C = [A|0]
, найдя уменьшенную форму эшелона строк и решив для переменных по строкам. Кажется, я не понимаю, как это делается в этих примерах.
Спасибо за любую помощь!
Вот моя матрица образца, которая является такой же, как wikipedia example: Метод
A = matrix([
[2,3,5],
[-4,2,3]
])
(found here и here):
import scipy
from scipy import linalg, matrix
def null(A, eps=1e-15):
u, s, vh = scipy.linalg.svd(A)
null_mask = (s <= eps)
null_space = scipy.compress(null_mask, vh, axis=0)
return scipy.transpose(null_space)
Когда я пытаюсь это, я получаю обратно пустой матрица:
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import scipy
>>> from scipy import linalg, matrix
>>> def null(A, eps=1e-15):
... u, s, vh = scipy.linalg.svd(A)
... null_mask = (s <= eps)
... null_space = scipy.compress(null_mask, vh, axis=0)
... return scipy.transpose(null_space)
...
>>> A = matrix([
... [2,3,5],
... [-4,2,3]
... ])
>>>
>>> null(A)
array([], shape=(3, 0), dtype=float64)
>>>
Википедии страница, которую вы связаны на самом деле дает очень хорошее объяснение того, почему вы должны использовать SVD для вычисления нулевого пространства (или решения) матрицы, когда вы имеете дело с значениями с плавающей запятой. http://en.wikipedia.org/wiki/Kernel_%28matrix%29#Numerical_comput_of_null_space Подход, который вы описываете (решение для переменных по строкам), будет усиливать любые ошибки округления и т. д. (Это та же причина, по которой вы должны почти никогда явно не вычисляет обратную матрицу ...) –