M1 = Matrix(([4, 2, sqrt(3)], [2, 2, 0], [sqrt(3), 0, 1] ))
M1.is_indefinite
M2 = Matrix(([4, 2, 1], [2, 2, 0], [1, 0, 1] ))
M2.is_indefinite
M3 = Matrix(([14, -9, 0], [-9, 32, 30], [0, 30, 1]))
M3.is_indefinite
M4 = Matrix(([1, -4, -6], [-4, 2, 3], [-6, 3, 8] ))
M4.is_indefinite
B1 = Matrix(([3, -1, 1, 1, 0, 0], [-1, 2, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 1, 1, 0], [0, 0, 0, 1, 4, 1], [0, 0, 0, 1, 1, 2] ))
B1.is_indefinite
B1.eigenvals()
B1.diagonalize()
B2 = Matrix([[12, -4, 4, 3, 1, 0], [-4, 6, -1, 2, 1, 0], [4, -1, 2, 1, 0, 0], [3, 2, 1, 5, 6, 3], [1, 1, 0, 6, 18, 6], [0, 0, 0, 3, 6, 5]]) # this is in fact L2 = L1.T*L1
B2.is_indefinite
B2.eigenvals()
B2.diagonalize()
B3 = Matrix(([1, -1, 1, 0, 0, 1], [-1, 2, 1, 0, 2, 0], [1, 1, 6, 2, 3, 0], [0, 0, 2, 1, 4, 0], [0, 2, 3, 4, 5, 1], [1, 0, 0, 0, 1, 2] ))
B3.is_indefinite
B3.eigenvals()
B3.diagonalize()
B1 = Matrix(([3, -1, 1, 1, 0, 0], [-1, 2, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 1, 1, 0], [0, 0, 0, 1, 4, 1], [0, 0, 0, 1, 1, 2] ))
B1.is_indefinite
---------------------------------------------------------------------------
MatrixError Traceback (most recent call last)
<ipython-input-4-e4a304898903> in <module>
----> 1 B1.is_indefinite
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in is_indefinite(self)
402 @property
403 def is_indefinite(self):
--> 404 return _is_indefinite(self)
405
406 def jordan_form(self, calc_transform=True, **kwargs):
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _is_indefinite(M)
679
680 elif M.is_square:
--> 681 return (M + M.H).is_indefinite
682
683 return False
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in is_indefinite(self)
402 @property
403 def is_indefinite(self):
--> 404 return _is_indefinite(self)
405
406 def jordan_form(self, calc_transform=True, **kwargs):
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _is_indefinite(M)
670 def _is_indefinite(M):
671 if M.is_hermitian:
--> 672 eigen = M.eigenvals()
673 args1 = [x.is_positive for x in eigen.keys()]
674 any_positive = fuzzy_or(args1)
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in eigenvals(self, error_when_incomplete, **flags)
365
366 def eigenvals(self, error_when_incomplete=True, **flags):
--> 367 return _eigenvals(self, error_when_incomplete=error_when_incomplete, **flags)
368
369 def eigenvects(self, error_when_incomplete=True, iszerofunc=_iszero, **flags):
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _eigenvals(M, error_when_incomplete, **flags)
178 if not multiple and sum(eigs.values()) != M.rows or \
179 multiple and len(eigs) != M.cols:
--> 180 raise MatrixError(
181 "Could not compute eigenvalues for {}".format(M))
182
MatrixError: Could not compute eigenvalues for Matrix([[6, -2, 2, 2, 0, 0], [-2, 4, 0, 2, 0, 0], [2, 0, 2, 0, 0, 0], [2, 2, 0, 2, 2, 1], [0, 0, 0, 2, 8, 2], [0, 0, 0, 1, 2, 4]])
B1.eigenvals()
---------------------------------------------------------------------------
MatrixError Traceback (most recent call last)
<ipython-input-5-c349f98060e3> in <module>
----> 1 B1.eigenvals()
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in eigenvals(self, error_when_incomplete, **flags)
365
366 def eigenvals(self, error_when_incomplete=True, **flags):
--> 367 return _eigenvals(self, error_when_incomplete=error_when_incomplete, **flags)
368
369 def eigenvects(self, error_when_incomplete=True, iszerofunc=_iszero, **flags):
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _eigenvals(M, error_when_incomplete, **flags)
178 if not multiple and sum(eigs.values()) != M.rows or \
179 multiple and len(eigs) != M.cols:
--> 180 raise MatrixError(
181 "Could not compute eigenvalues for {}".format(M))
182
MatrixError: Could not compute eigenvalues for Matrix([[3, -1, 1, 1, 0, 0], [-1, 2, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 1, 1, 0], [0, 0, 0, 1, 4, 1], [0, 0, 0, 1, 1, 2]])
B1.diagonalize()
---------------------------------------------------------------------------
MatrixError Traceback (most recent call last)
<ipython-input-6-e1b11adc4556> in <module>
----> 1 B1.diagonalize()
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in diagonalize(self, reals_only, sort, normalize)
375
376 def diagonalize(self, reals_only=False, sort=False, normalize=False):
--> 377 return _diagonalize(self, reals_only=reals_only, sort=sort,
378 normalize=normalize)
379
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _diagonalize(M, reals_only, sort, normalize)
599 raise NonSquareMatrixError()
600
--> 601 is_diagonalizable, eigenvecs = _is_diagonalizable_with_eigen(M,
602 reals_only=reals_only)
603
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _is_diagonalizable_with_eigen(M, reals_only)
336 return False, []
337
--> 338 eigenvecs = M.eigenvects(simplify=True)
339
340 for val, mult, basis in eigenvecs:
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in eigenvects(self, error_when_incomplete, iszerofunc, **flags)
368
369 def eigenvects(self, error_when_incomplete=True, iszerofunc=_iszero, **flags):
--> 370 return _eigenvects(self, error_when_incomplete=error_when_incomplete,
371 iszerofunc=iszerofunc, **flags)
372
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _eigenvects(M, error_when_incomplete, iszerofunc, **flags)
301 M = M.applyfunc(lambda x: nsimplify(x, rational=True))
302
--> 303 eigenvals = M.eigenvals(
304 rational=False, error_when_incomplete=error_when_incomplete,
305 **flags)
~/.local/lib/python3.8/site-packages/sympy/matrices/matrices.py in eigenvals(self, error_when_incomplete, **flags)
365
366 def eigenvals(self, error_when_incomplete=True, **flags):
--> 367 return _eigenvals(self, error_when_incomplete=error_when_incomplete, **flags)
368
369 def eigenvects(self, error_when_incomplete=True, iszerofunc=_iszero, **flags):
~/.local/lib/python3.8/site-packages/sympy/matrices/eigen.py in _eigenvals(M, error_when_incomplete, **flags)
178 if not multiple and sum(eigs.values()) != M.rows or \
179 multiple and len(eigs) != M.cols:
--> 180 raise MatrixError(
181 "Could not compute eigenvalues for {}".format(M))
182
MatrixError: Could not compute eigenvalues for Matrix([[3, -1, 1, 1, 0, 0], [-1, 2, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [1, 1, 0, 1, 1, 0], [0, 0, 0, 1, 4, 1], [0, 0, 0, 1, 1, 2]])
B1_44 = Matrix(([3, -1, 1, 1], [-1, 2, 0, 1], [1, 0, 1, 0], [1, 1, 0, 1]))
B1_44.is_indefinite
B1_55 = Matrix(([3, -1, 1, 1, 0], [-1, 2, 0, 1, 0], [1, 0, 1, 0, 0], [1, 1, 0, 1, 1], [0, 0, 0, 1, 4]))
B1_55.is_indefinite
B1_65 = Matrix(([3, -1, 1, 1, 0], [-1, 2, 0, 1, 0], [1, 0, 1, 0, 0], [1, 1, 0, 1, 1], [0, 0, 0, 1, 4], [0, 0, 0, 1, 1] ))
B1_65.is_indefinite
There have been some recent improvements to the code handling this
which you could try out by installing the pre-release of 1.6 with pip:
pip install -U --pre sympy
--
Oscar
> To unsubscribe from this group and stop receiving emails from it, send an email to sy...@googlegroups.com.
In [11]: B1.is_positive_semidefinite Out[11]: False
In [12]: B1.is_negative_semidefinite Out[12]: False
In [13]: B1.n().eigenvals() Out[13]: {-0.423518261117994: 1, 0.830838432644968: 1, 1.57353243409785: 1, 2.309362853398: 1, 3.91273545644822: 1, 4.79704908452897: 1}
In [14]: B1.n().is_indefinite Out[14]: True