123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """
- Tests for the sympy.polys.matrices.eigen module
- """
- from sympy.core.singleton import S
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.matrices.dense import Matrix
- from sympy.polys.agca.extensions import FiniteExtension
- from sympy.polys.domains import QQ
- from sympy.polys.polytools import Poly
- from sympy.polys.rootoftools import CRootOf
- from sympy.polys.matrices.domainmatrix import DomainMatrix
- from sympy.polys.matrices.eigen import dom_eigenvects, dom_eigenvects_to_sympy
- def test_dom_eigenvects_rational():
- # Rational eigenvalues
- A = DomainMatrix([[QQ(1), QQ(2)], [QQ(1), QQ(2)]], (2, 2), QQ)
- rational_eigenvects = [
- (QQ, QQ(3), 1, DomainMatrix([[QQ(1), QQ(1)]], (1, 2), QQ)),
- (QQ, QQ(0), 1, DomainMatrix([[QQ(-2), QQ(1)]], (1, 2), QQ)),
- ]
- assert dom_eigenvects(A) == (rational_eigenvects, [])
- # Test converting to Expr:
- sympy_eigenvects = [
- (S(3), 1, [Matrix([1, 1])]),
- (S(0), 1, [Matrix([-2, 1])]),
- ]
- assert dom_eigenvects_to_sympy(rational_eigenvects, [], Matrix) == sympy_eigenvects
- def test_dom_eigenvects_algebraic():
- # Algebraic eigenvalues
- A = DomainMatrix([[QQ(1), QQ(2)], [QQ(3), QQ(4)]], (2, 2), QQ)
- Avects = dom_eigenvects(A)
- # Extract the dummy to build the expected result:
- lamda = Avects[1][0][1].gens[0]
- irreducible = Poly(lamda**2 - 5*lamda - 2, lamda, domain=QQ)
- K = FiniteExtension(irreducible)
- KK = K.from_sympy
- algebraic_eigenvects = [
- (K, irreducible, 1, DomainMatrix([[KK((lamda-4)/3), KK(1)]], (1, 2), K)),
- ]
- assert Avects == ([], algebraic_eigenvects)
- # Test converting to Expr:
- sympy_eigenvects = [
- (S(5)/2 - sqrt(33)/2, 1, [Matrix([[-sqrt(33)/6 - S(1)/2], [1]])]),
- (S(5)/2 + sqrt(33)/2, 1, [Matrix([[-S(1)/2 + sqrt(33)/6], [1]])]),
- ]
- assert dom_eigenvects_to_sympy([], algebraic_eigenvects, Matrix) == sympy_eigenvects
- def test_dom_eigenvects_rootof():
- # Algebraic eigenvalues
- A = DomainMatrix([
- [0, 0, 0, 0, -1],
- [1, 0, 0, 0, 1],
- [0, 1, 0, 0, 0],
- [0, 0, 1, 0, 0],
- [0, 0, 0, 1, 0]], (5, 5), QQ)
- Avects = dom_eigenvects(A)
- # Extract the dummy to build the expected result:
- lamda = Avects[1][0][1].gens[0]
- irreducible = Poly(lamda**5 - lamda + 1, lamda, domain=QQ)
- K = FiniteExtension(irreducible)
- KK = K.from_sympy
- algebraic_eigenvects = [
- (K, irreducible, 1,
- DomainMatrix([
- [KK(lamda**4-1), KK(lamda**3), KK(lamda**2), KK(lamda), KK(1)]
- ], (1, 5), K)),
- ]
- assert Avects == ([], algebraic_eigenvects)
- # Test converting to Expr (slow):
- l0, l1, l2, l3, l4 = [CRootOf(lamda**5 - lamda + 1, i) for i in range(5)]
- sympy_eigenvects = [
- (l0, 1, [Matrix([-1 + l0**4, l0**3, l0**2, l0, 1])]),
- (l1, 1, [Matrix([-1 + l1**4, l1**3, l1**2, l1, 1])]),
- (l2, 1, [Matrix([-1 + l2**4, l2**3, l2**2, l2, 1])]),
- (l3, 1, [Matrix([-1 + l3**4, l3**3, l3**2, l3, 1])]),
- (l4, 1, [Matrix([-1 + l4**4, l4**3, l4**2, l4, 1])]),
- ]
- assert dom_eigenvects_to_sympy([], algebraic_eigenvects, Matrix) == sympy_eigenvects
|