Skip to content

Commit 52db63c

Browse files
author
Matthias Koeppe
committed
src/sage/modules/free_module_morphism.py: Fix merge
1 parent 045cf17 commit 52db63c

1 file changed

Lines changed: 0 additions & 161 deletions

File tree

src/sage/modules/free_module_morphism.py

Lines changed: 0 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -486,167 +486,6 @@ def lift(self, x):
486486

487487
preimage_representative = lift
488488

489-
def eigenvalues(self, extend=True):
490-
r"""
491-
Returns a list with the eigenvalues of the endomorphism of vector spaces.
492-
493-
INPUT:
494-
495-
- ``extend`` -- boolean (default: ``True``) decides if base field
496-
extensions should be considered or not.
497-
498-
EXAMPLES:
499-
500-
We compute the eigenvalues of an endomorphism of `\QQ^3`::
501-
502-
sage: V = QQ^3
503-
sage: H = V.endomorphism_ring()([[1,-1,0], [-1,1,1], [0,3,1]])
504-
sage: H.eigenvalues() # needs sage.rings.number_field
505-
[3, 1, -1]
506-
507-
Note the effect of the ``extend`` option::
508-
509-
sage: V = QQ^2
510-
sage: H = V.endomorphism_ring()([[0,-1], [1,0]])
511-
sage: H.eigenvalues() # needs sage.rings.number_field
512-
[-1*I, 1*I]
513-
sage: H.eigenvalues(extend=False) # needs sage.libs.pari
514-
[]
515-
"""
516-
if self.base_ring().is_field():
517-
if self.is_endomorphism():
518-
return self.matrix().eigenvalues(extend=extend)
519-
else:
520-
raise TypeError("not an endomorphism")
521-
else:
522-
raise NotImplementedError("module must be a vector space")
523-
524-
def eigenvectors(self, extend=True):
525-
"""
526-
Computes the subspace of eigenvectors of a given eigenvalue.
527-
528-
INPUT:
529-
530-
- ``extend`` -- boolean (default: ``True``) decides if base field
531-
extensions should be considered or not.
532-
533-
OUTPUT:
534-
535-
A sequence of tuples. Each tuple contains an eigenvalue, a sequence
536-
with a basis of the corresponding subspace of eigenvectors, and the
537-
algebraic multiplicity of the eigenvalue.
538-
539-
EXAMPLES::
540-
541-
sage: # needs sage.rings.number_field
542-
sage: V = (QQ^4).subspace([[0,2,1,4], [1,2,5,0], [1,1,1,1]])
543-
sage: H = (V.Hom(V))(matrix(QQ, [[0,1,0], [-1,0,0], [0,0,3]]))
544-
sage: H.eigenvectors()
545-
[(3, [ (0, 0, 1, -6/7) ], 1),
546-
(-1*I, [ (1, 1*I, 0, -0.571428571428572? + 2.428571428571429?*I) ], 1),
547-
(1*I, [ (1, -1*I, 0, -0.571428571428572? - 2.428571428571429?*I) ], 1)]
548-
sage: H.eigenvectors(extend=False)
549-
[(3, [ (0, 0, 1, -6/7) ], 1)]
550-
sage: H1 = (V.Hom(V))(matrix(QQ, [[2,1,0],[0,2,0],[0,0,3]]))
551-
sage: H1.eigenvectors()
552-
[(3, [ (0, 0, 1, -6/7) ], 1),
553-
(2, [ (0, 1, 0, 17/7) ], 2)]
554-
sage: H1.eigenvectors(extend=False)
555-
[(3, [ (0, 0, 1, -6/7) ], 1),
556-
(2, [ (0, 1, 0, 17/7) ], 2)]
557-
558-
::
559-
560-
sage: V = QQ^2
561-
sage: m = matrix(2, [1, 1, 0, 1])
562-
sage: V.hom(m, side="right").eigenvectors() # needs sage.rings.number_field
563-
[(1, [ (1, 0) ], 2)]
564-
sage: V.hom(m).eigenvectors() # needs sage.rings.number_field
565-
[(1, [ (0, 1) ], 2)]
566-
"""
567-
if self.base_ring().is_field():
568-
if self.is_endomorphism():
569-
if self.side() == "right":
570-
seigenvec = self.matrix().eigenvectors_right(extend=extend)
571-
else:
572-
seigenvec = self.matrix().eigenvectors_left(extend=extend)
573-
resu = []
574-
for i in seigenvec:
575-
V = self.domain().base_extend(i[0].parent())
576-
svectors = Sequence([V(j * V.basis_matrix()) for j in i[1]], cr=True)
577-
resu.append((i[0], svectors, i[2]))
578-
return resu
579-
else:
580-
raise TypeError("not an endomorphism")
581-
else:
582-
raise NotImplementedError("module must be a vector space")
583-
584-
def eigenspaces(self, extend=True):
585-
"""
586-
Compute a list of subspaces formed by eigenvectors of ``self``.
587-
588-
INPUT:
589-
590-
- ``extend`` -- (default: ``True``) determines if field
591-
extensions should be considered
592-
593-
OUTPUT:
594-
595-
- a list of pairs ``(eigenvalue, eigenspace)``
596-
597-
EXAMPLES::
598-
599-
sage: V = QQ^3
600-
sage: h = V.hom([[1,0,0], [0,0,1], [0,-1,0]], V)
601-
sage: h.eigenspaces() # needs sage.rings.number_field
602-
[(1, Vector space of degree 3 and dimension 1 over Rational Field
603-
Basis matrix:
604-
[1 0 0]),
605-
(-1*I, Vector space of degree 3 and dimension 1 over Algebraic Field
606-
Basis matrix:
607-
[ 0 1 1*I]),
608-
(1*I, Vector space of degree 3 and dimension 1 over Algebraic Field
609-
Basis matrix:
610-
[ 0 1 -1*I])]
611-
612-
sage: h.eigenspaces(extend=False) # needs sage.rings.number_field
613-
[(1,
614-
Vector space of degree 3 and dimension 1 over Rational Field
615-
Basis matrix:
616-
[1 0 0])]
617-
618-
sage: h = V.hom([[2,1,0], [0,2,0], [0,0,-1]], V)
619-
sage: h.eigenspaces() # needs sage.rings.number_field
620-
[(-1, Vector space of degree 3 and dimension 1 over Rational Field
621-
Basis matrix:
622-
[0 0 1]),
623-
(2, Vector space of degree 3 and dimension 1 over Rational Field
624-
Basis matrix:
625-
[0 1 0])]
626-
627-
sage: h = V.hom([[2,1,0], [0,2,0], [0,0,2]], V)
628-
sage: h.eigenspaces() # needs sage.rings.number_field
629-
[(2, Vector space of degree 3 and dimension 2 over Rational Field
630-
Basis matrix:
631-
[0 1 0]
632-
[0 0 1])]
633-
634-
::
635-
636-
sage: V = QQ^2; m = matrix(2, [1, 1, 0, 1])
637-
sage: V.hom(m, side="right").eigenspaces() # needs sage.rings.number_field
638-
[(1, Vector space of degree 2 and dimension 1 over Rational Field
639-
Basis matrix:
640-
[1 0])]
641-
sage: V.hom(m).eigenspaces() # needs sage.rings.number_field
642-
[(1, Vector space of degree 2 and dimension 1 over Rational Field
643-
Basis matrix:
644-
[0 1])]
645-
"""
646-
ev = self.eigenvectors(extend)
647-
return [(vec[0], Sequence(vec[1]).universe().subspace(vec[1]))
648-
for vec in ev]
649-
650489

651490
class BaseIsomorphism1D(Morphism):
652491
"""

0 commit comments

Comments
 (0)