X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=mjo%2Fcone%2Ffaces.py;h=70706a8ca82383c25d98a17d28a333d8d942f83a;hb=785d079a2f5faa5126685aea96d584c3fa9c3007;hp=a6820164999e55d6396d5d1b081419e57f5c791b;hpb=924b894e3f5f11886809058fd210f124a1f3f22f;p=sage.d.git diff --git a/mjo/cone/faces.py b/mjo/cone/faces.py index a682016..70706a8 100644 --- a/mjo/cone/faces.py +++ b/mjo/cone/faces.py @@ -143,13 +143,17 @@ def dual_face(K,F): REFERENCES: + .. [HilgertHofmannLawson] Joachim Hilgert, Karl Heinrich Hofmann, and Jimmie + D. Lawson. Lie groups, convex cones and semigroups. Oxford Mathematical + Monographs. Clarendon Press, Oxford, 1989. ISBN 9780198535690. + .. [Tam] Bit-Shun Tam. On the duality operator of a convex cone. Linear Algebra and its Applications, 64:33-56, 1985, doi:10.1016/0024-3795(85) 90265-4. SETUP:: - sage: from mjo.cone.faces import dual_face + sage: from mjo.cone.faces import (dual_face, face_generated_by) EXAMPLES: @@ -189,6 +193,29 @@ def dual_face(K,F): sage: dual_face(K,trivial_face).is_equivalent(K.dual()) True + The dual of the cone of ``K`` at ``y`` is the dual face of the face + of ``K`` generated by ``y`` ([Tam]_ Corollary 3.2):: + + sage: set_random_seed() + sage: K = random_cone(max_ambient_dim=8, max_rays=10) + sage: y = K.random_element() + sage: S = [y] + sage: phi_y = face_generated_by(K,S) + sage: points_cone_gens = list(K.rays()) + [-z for z in phi_y.rays()] + sage: points_cone = Cone(points_cone_gens, K.lattice()) + sage: points_cone.dual().is_equivalent(dual_face(K, phi_y)) + True + + Since all faces of a polyhedral cone are exposed, the dual face of a + dual face should be the original face [HilgertHofmannLawson]_:: + + sage: set_random_seed() + sage: def check_prop(K,F): + ....: return dual_face(K.dual(), dual_face(K,F)).is_equivalent(F) + sage: K = random_cone(max_ambient_dim=8, max_rays=10) + sage: all([check_prop(K,F) for F in K.face_lattice()]) + True + """ # Ensure that F is actually a face of K before continuing. if not F.is_face_of(K):