X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Fcone.py;h=68fd1931e9d7a4a7fdf3a00a5636011c963e58dd;hb=86442dc35e3dbbf69dc91caa1222d4dfce2fb106;hp=adba809cf26722f52b0ec75432b2e6068683c3d9;hpb=a9af5fd329a524faba3071c52fcc52122e8cf631;p=sage.d.git diff --git a/mjo/cone/cone.py b/mjo/cone/cone.py index adba809..68fd193 100644 --- a/mjo/cone/cone.py +++ b/mjo/cone/cone.py @@ -135,6 +135,14 @@ def motzkin_decomposition(K): sage: S.lineality() == S.dim() True + A strictly convex cone should be equal to its strictly convex component:: + + sage: set_random_seed() + sage: K = random_cone(max_ambient_dim=8, strictly_convex=True) + sage: (P,_) = motzkin_decomposition(K) + sage: K.is_equivalent(P) + True + The generators of the components are obtained from orthogonal projections of the original generators [Stoer-Witzgall]_:: @@ -155,11 +163,11 @@ def motzkin_decomposition(K): # The lines() method only returns one generator per line. For a true # line, we also need a generator pointing in the opposite direction. S_gens = [ direction*gen for direction in [1,-1] for gen in K.lines() ] - S = Cone(S_gens, K.lattice()) + S = Cone(S_gens, K.lattice(), check=False) # Since ``S`` is a subspace, the rays of its dual generate its # orthogonal complement. - S_perp = Cone(S.dual(), K.lattice()) + S_perp = Cone(S.dual(), K.lattice(), check=False) P = K.intersection(S_perp) return (P,S)