]> gitweb.michael.orlitzky.com - sage.d.git/commitdiff
First attempt at implementing LL(K); it doesn't work.
authorMichael Orlitzky <michael@orlitzky.com>
Sun, 24 May 2015 16:42:59 +0000 (12:42 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Sun, 24 May 2015 16:42:59 +0000 (12:42 -0400)
mjo/cone/cone.py

index dbe369a8c2feabaee32bade898106641c3a3c3f0..a5482b3aa95f7198938007c4be615c4e7a97e17d 100644 (file)
@@ -91,7 +91,37 @@ def LL(K):
     Lyapunov-like on this cone.
 
     """
-    pass # implement me lol
+    V = K.lattice().vector_space()
+
+    C_of_K = discrete_complementarity_set(K)
+
+    matrices = [x.tensor_product(s) for (x,s) in C_of_K]
+
+    # Sage doesn't think matrices are vectors, so we have to convert
+    # our matrices to vectors explicitly before we can figure out how
+    # many are linearly-indepenedent.
+    #
+    # The space W has the same base ring as V, but dimension
+    # dim(V)^2. So it has the same dimension as the space of linear
+    # transformations on V. In other words, it's just the right size
+    # to create an isomorphism between it and our matrices.
+    W = VectorSpace(V.base_ring(), V.dimension()**2)
+
+    # Turn our matrices into long vectors...
+    vectors = [ W(m.list()) for m in matrices ]
+
+    # Vector space representation of Lyapunov-like matrices
+    # (i.e. vec(L) where L is Luapunov-like).
+    LL_vector = W.span(vectors).complement()
+
+    # Now construct an ambient MatrixSpace in which to stick our
+    # transformations.
+    M = MatrixSpace(V.base_ring(), V.dimension())
+
+    matrices = [ M(v.list()) for v in LL_vector.basis() ]
+
+    return matrices
+
 
 
 def lyapunov_rank(K):