- Compute generators of the cone of positive operators on this cone.
-
- OUTPUT:
-
- A list of `n`-by-``n`` matrices where ``n == K.lattice_dim()``.
- Each matrix ``P`` in the list should have the property that ``P*x``
- is an element of ``K`` whenever ``x`` is an element of
- ``K``. Moreover, any nonnegative linear combination of these
- matrices shares the same property.
-
- EXAMPLES:
-
- Positive operators on the nonnegative orthant are nonnegative matrices::
-
- sage: K = Cone([(1,)])
- sage: positive_operator_gens(K)
- [[1]]
-
- sage: K = Cone([(1,0),(0,1)])
- sage: positive_operator_gens(K)
- [
- [1 0] [0 1] [0 0] [0 0]
- [0 0], [0 0], [1 0], [0 1]
- ]
-
- The trivial cone in a trivial space has no positive operators::
-
- sage: K = Cone([], ToricLattice(0))
- sage: positive_operator_gens(K)
- []
-
- Every operator is positive on the trivial cone::
-
- sage: K = Cone([(0,)])
- sage: positive_operator_gens(K)
- [[1], [-1]]
-
- sage: K = Cone([(0,0)])
- sage: K.is_trivial()
- True
- sage: positive_operator_gens(K)
- [
- [1 0] [-1 0] [0 1] [ 0 -1] [0 0] [ 0 0] [0 0] [ 0 0]
- [0 0], [ 0 0], [0 0], [ 0 0], [1 0], [-1 0], [0 1], [ 0 -1]
- ]
-
- Every operator is positive on the ambient vector space::
-
- sage: K = Cone([(1,),(-1,)])
- sage: K.is_full_space()
- True
- sage: positive_operator_gens(K)
- [[1], [-1]]
-
- sage: K = Cone([(1,0),(-1,0),(0,1),(0,-1)])
- sage: K.is_full_space()
- True
- sage: positive_operator_gens(K)
- [
- [1 0] [-1 0] [0 1] [ 0 -1] [0 0] [ 0 0] [0 0] [ 0 0]
- [0 0], [ 0 0], [0 0], [ 0 0], [1 0], [-1 0], [0 1], [ 0 -1]
- ]
-
- A non-obvious application is to find the positive operators on the
- right half-plane::
-
- sage: K = Cone([(1,0),(0,1),(0,-1)])
- sage: positive_operator_gens(K)
- [
- [1 0] [0 0] [ 0 0] [0 0] [ 0 0]
- [0 0], [1 0], [-1 0], [0 1], [ 0 -1]
- ]
-
- TESTS:
-
- Each positive operator generator should send the generators of the
- cone into the cone::