- Every operator is a Z-transformation on the ambient vector space::
-
- sage: K = Cone([(1,),(-1,)])
- sage: K.is_full_space()
- True
- sage: Z_transformation_gens(K)
- [[-1], [1]]
-
- sage: K = Cone([(1,0),(-1,0),(0,1),(0,-1)])
- sage: K.is_full_space()
- True
- sage: Z_transformation_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 Z-transformations on the
- right half-plane::
-
- sage: K = Cone([(1,0),(0,1),(0,-1)])
- sage: Z_transformation_gens(K)
- [
- [-1 0] [1 0] [ 0 0] [0 0] [ 0 0] [0 0]
- [ 0 0], [0 0], [-1 0], [1 0], [ 0 -1], [0 1]
- ]
-
- Z-transformations on a subspace are Lyapunov-like and vice-versa::
-
- sage: K = Cone([(1,0),(-1,0),(0,1),(0,-1)])
- sage: K.is_full_space()
- True
- sage: lls = span([ vector(l.list()) for l in K.lyapunov_like_basis() ])
- sage: zs = span([ vector(z.list()) for z in Z_transformation_gens(K) ])
- sage: zs == lls
+ sage: K = Cone([(1,0,0),(0,1,0),(0,0,1)])
+ sage: L = diagonal_matrix(random_vector(QQ,3))
+ sage: is_lyapunov_like_on(L,K)