I came across the following issue when trying to use Sympy to compute an LU
decomposition of a matrix. I'd like to determine the number of solutions a
system of equations has, for example, if
A = sympy.Matrix([[1,2,3],[4,5,6],[7,8,9]])
b = sympy.Matrix([4, 13, 22])
then the system A*x=b has infinitely many solutions, all of which can be
written as
x0 + t*n
where
x0 = sympy.Matrix([2,1,0])
n = sympy.Matrix([1,-2,1])
t = sympy.Symbol('t')
This solution can be computed from the LU decomposition of A, however the
following code fails to compute the factors L and U.
>>> import sympy
>>> A = sympy.Matrix([[1,2,3],[4,5,6],[7,8,9]])
>>> LU, perm = A.LUdecomposition()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/sympy/matrices/matrices.py", line
1297, in LUdecomposition
combined, p = self.LUdecomposition_Simple(iszerofunc=_iszero)
File "/Library/Python/2.7/site-packages/sympy/matrices/matrices.py", line
1341, in LUdecomposition_Simple
raise ValueError("No nonzero pivot found; inversion failed.")
ValueError: No nonzero pivot found; inversion failed.
A is square and noninvertible, which explains the message in the stack
trace about the elimination algorithm encountering a zero subcolumn below
the pivot position. Regardless, A can still be written as the product of
lower triangular L with unit diagonal, and upper triangular U, where
L = sympy.Matrix([[1, 0, 0], [4, 1, 0], [7, 2, 1]])
U = sympy.Matrix([[1, 2, 3], [0, -3, -6], [0, 0, 0]])
Is A.LUdecomposition() the wrong function to call if I want to compute the
LU decomposition of A in the case where A is noninvertible, or not square?
I wrote my own LU decomposition routine to handle these cases, which I'd be
happy to contribute, but I'd like to know if this functionality exists in
Sympy.
Thanks in advance for your input,
Tom
--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sympy/fd7d07b6-4261-4c70-bb9a-5c9961834439%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.