2013-09-28 13 views
5

Jeśli pytam SymPy wiosłować-zmniejszenie liczby pojedynczej macierzyDlaczego SymPy daje mi złą odpowiedź, gdy zaczynam wiersze - zredukować symboliczną matrycę?

nu = Symbol('nu') 
lamb = Symbol('lambda') 
A3 = Matrix([[-3*nu, 1, 0, 0], 
      [3*nu, -2*nu-1, 2, 0], 
      [0, 2*nu, (-1 * nu) - lamb - 2, 3], 
      [0, 0, nu + lamb, -3]]) 
print A3.rref() 

wówczas zwraca macierz jednostkowa

(Matrix([ 
[1, 0, 0, 0], 
[0, 1, 0, 0], 
[0, 0, 1, 0], 
[0, 0, 0, 1]]), [0, 1, 2, 3]) 

których nie powinien robić, ponieważ matryca jest w liczbie pojedynczej. Dlaczego SymPy daje mi złą odpowiedź i jak mogę ją zdobyć, by dać mi właściwą odpowiedź?

wiem SymPy wie, matryca jest w liczbie pojedynczej, bo kiedy pytam o A3.inv(), to daje

raise ValueError("Matrix det == 0; not invertible.") 

Ponadto, kiedy wyjąć baranka z matrycy (równoważne ustawieniu jagnięcina = 0) , SymPy daje poprawną odpowiedź:

(Matrix([ 
[1, 0, 0, -1/nu**3], 
[0, 1, 0, -3/nu**2], 
[0, 0, 1, -3/nu], 
[0, 0, 0,  0]]), [0, 1, 2]) 

która prowadzi mnie do przypuszczenia, że ​​ten problem występuje tylko z więcej niż jednej zmiennej.

EDYCJA: Interesujące, właśnie dostałem poprawną odpowiedź, gdy przekazuję rref() argument "uproszczenie = prawda". Wciąż nie mam pojęcia, dlaczego tak jest.

+0

Zauważ, że to teraz działa poprawnie w wersji rozwojowej SymPy. – moorepants

Odpowiedz

1

Algorytm rref zasadniczo wymaga umiejętności określenia, czy elementy macierzy są identyczne zero. W SymPy, opcja simplify=True instruuje SymPy, aby upraszczała wpisy najpierw na odpowiednim etapie algorytmu. W przypadku wpisów symbolicznych jest to konieczne, ponieważ możesz łatwo mieć wyrażenia symboliczne, które są identyczne zero, ale które nie upraszczają takich automatycznie, jak na przykład x*(x - 1) - x**2 + x. Opcja ta jest domyślnie wyłączona, ponieważ na ogół takie uproszczenie może być kosztowne, przez to można sterować, przepuszczając mniej ogólną funkcję upraszczającą niż simplify (w przypadku funkcji wymiernych należy użyć cancel). Wartości domyślne tutaj mogą prawdopodobnie być mądrzejsze.

Powiązane problemy