@@ -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
651490class BaseIsomorphism1D (Morphism ):
652491 """
0 commit comments