Próbuję znaleźć pustą przestrzeń (przestrzeń rozwiązania Ax = 0) danej macierzy. Znalazłem dwa przykłady, ale nie mogę sprawić, żeby działały. Ponadto nie mogę zrozumieć, co robią, aby się tam dostać, więc nie mogę debugować. Mam nadzieję, że ktoś mógłby mnie przez to przejść.Python (NumPy, SciPy), znajdowanie pustej przestrzeni macierzy
Strony dokumentacji (numpy.linalg.svd
i numpy.compress
) są dla mnie nieprzejrzyste. Nauczyłem się tego, tworząc matrycę C = [A|0]
, znajdując zredukowaną formę rzutu rzutu i rozwiązując dla zmiennych po rzędzie. Nie wydaje mi się, aby śledzić, jak to się dzieje w tych przykładach.
Dzięki za wszelką pomoc!
Oto moja matryca próbki, która jest taka sama jak wikipedia example:
A = matrix([
[2,3,5],
[-4,2,3]
])
metodą (found here i 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)
Kiedy próbuję go, wrócę pusty macierz:
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)
>>>
Na stronie Wikipedii związana rzeczywiście daje bardzo ładne wyjaśnienie, dlaczego powinieneś używać SVD do obliczenia pustej przestrzeni (lub rozwiązania) macierzy, gdy masz do czynienia z wartościami zmiennoprzecinkowymi. http://en.wikipedia.org/wiki/Kernel_%28matrix%29#Numerical_computation_of_null_space Podejście, które opisujesz (rozwiązywanie zmiennych po rzędzie po rzędzie) wzmacnia wszelkie błędy zaokrąglania itp. (Jest to ten sam powód, dla którego powinieneś prawie nigdy jawnie nie obliczaj odwrotności macierzy ...) –