sage: idJ.inverse() == idJ
True
- The zero operator is never invertible::
+ The inverse of the inverse is the operator we started with::
sage: set_random_seed()
- sage: J = random_eja()
- sage: J.zero().operator().inverse()
- Traceback (most recent call last):
- ...
- ZeroDivisionError: input matrix must be nonsingular
+ sage: x = random_eja().random_element()
+ sage: L = x.operator()
+ sage: not L.is_invertible() or (L.inverse().inverse() == L)
+ True
"""
return ~self
sage: J.one().operator().is_invertible()
True
- The zero operator is never invertible::
+ The zero operator is never invertible in a nontrivial algebra::
sage: set_random_seed()
sage: J = random_eja()
- sage: J.zero().operator().is_invertible()
+ sage: not J.is_trivial() and J.zero().operator().is_invertible()
False
"""
Return the spectral decomposition of this operator as a list of
(eigenvalue, orthogonal projector) pairs.
+ This is the unique spectral decomposition, up to the order of
+ the projection operators, with distinct eigenvalues. So, the
+ projections are generally onto subspaces of dimension greater
+ than one.
+
SETUP::
sage: from mjo.eja.eja_algebra import RealSymmetricEJA
True
sage: P1^2 == P1
True
- sage: c0 = P0(A.one())
- sage: c1 = P1(A.one())
- sage: c0.inner_product(c1) == 0
- True
- sage: c0 + c1 == A.one()
- True
- sage: c0.is_idempotent()
+ sage: P0*P1 == A.zero().operator()
True
- sage: c1.is_idempotent()
+ sage: P1*P0 == A.zero().operator()
True
"""