Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
user_guide:tutorials:face_lattice_tutorial [2019/01/25 09:38] – ↷ Page moved from user_guide:face_lattice_tutorial to user_guide:tutorials:face_lattice_tutorial oroehrig | user_guide:tutorials:face_lattice_tutorial [2019/02/04 22:55] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Face lattices (of Polytopes) ====== | + | {{page> |
- | By definition the face lattice of a polytope contains all the combinatorial information about a polytope. | ||
- | |||
- | < | ||
- | polytope > $p = n_gon(5); | ||
- | polytope > $HD = $p-> | ||
- | polytope > print $HD-> | ||
- | {} | ||
- | {0} | ||
- | {1} | ||
- | {2} | ||
- | {3} | ||
- | {4} | ||
- | {1 2} | ||
- | {2 3} | ||
- | {3 4} | ||
- | {0 4} | ||
- | {0 1} | ||
- | {0 1 2 3 4} | ||
- | </ | ||
- | |||
- | The obvious question is: How to interpret that output? | ||
- | |||
- | Very often just a part of the face lattice is interesting. | ||
- | < | ||
- | polytope > print map { $p-> | ||
- | {2 3}{3 4}{0 4}{0 1}{1 2} | ||
- | </ | ||
- | |||
- | Face lattices of polytopes can be huge. So it may be an advantage to compute only a part. The following computes the 2-skeleton of an 8-dimensional cube. We need to specify 3 as a limit since this function uses the rank which is one more than the dimension. | ||
- | < | ||
- | polytope > $c=cube(8); | ||
- | polytope > $HD_partial = lower_hasse_diagram($c-> | ||
- | polytope > print $HD_partial-> | ||
- | {(0 (0 0)) (1 (1 256)) (2 (257 1280)) (3 (1281 3072)) (4 (3073 3073))} | ||
- | </ | ||
- | Instead of listing all those thousands of faces here we give only the pairs indicating the start-node and end-node for each rank. | ||
- | < | ||
- | polytope > print map { $HD_partial-> | ||
- | 256 1024 1792 | ||
- | </ | ||
- | |||
- | ===== Dealing with Large Polytopes ===== | ||
- | |||
- | In order to get the most out of the above it is important to understand that this kind of computation is a two-staged process. | ||
- | |||
- | To get at the incidence matrix typically requires a convex hull computation. | ||
- | < | ||
- | polytope > $p=rand_sphere(6, | ||
- | polytope > $p-> | ||
- | </ | ||
- | Notice that this takes a couple of seconds with the default convex hull code (via cdd), even on a large machine; and the reason is that the double description method employed is not best possible for this kind of input. | ||
- | < | ||
- | polytope > prefer_now " | ||
- | </ | ||
- | Temporarily (that is, only in this command) we change the default convex hull code to polymake' | ||
- | |||
- | In general, there is no way to tell ahead of time which convex hull algorithm works best. So, for your own experiments you will have to try. To get an idea you might want to look up: | ||
- | * Avis, David; Bremner, David; Seidel, Raimund: How good are convex hull algorithms? 11th ACM Symposium on Computational Geometry (Vancouver, BC, 1995). Comput. Geom. 7 (1997), no. 5-6, 265–301. | ||
- | * Joswig, Michael: Beneath-and-beyond revisited. Algebra, geometry, and software systems, 1–21, Springer, Berlin, 2003. | ||
- | |||
- | The subsequent second stage looks as above; but the difference is that VERTICES_IN_FACETS is known already. | ||
- | < | ||
- | polytope > $HD_partial = lower_hasse_diagram($p-> | ||
- | polytope > print map { $HD_partial-> | ||
- | 100 2004 10638 | ||
- | </ | ||
- | The executive summary: While polymake is designed to do all kinds of things automatically, | ||
- | |||
- | One more caveat: | ||
- | * McMullen, Peter: | ||
- | This number is actually attained by neighborly polytopes; for example, by the cyclic polytopes. |