Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
tutorial:face_lattice_tutorial [2014/01/03 15:45] – external edit 127.0.0.1 | 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 > for (my $k=$HD-> | ||
- | {1 2}{2 3}{3 4}{0 4}{0 1} | ||
- | </ | ||
- | The above works as described since DIMS return an array with the first nodes of each dimension. | ||
- | |||
- | 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. | ||
- | < | ||
- | polytope > $c=cube(8); | ||
- | polytope > $HD_partial = hasse_diagram($c-> | ||
- | polytope > print $HD_partial-> | ||
- | 1 257 1281 3073 | ||
- | </ | ||
- | Instead of listing all those thousands of faces here we give only the vector of starting nodes. | ||
- | < | ||
- | polytope > $partial_f = $HD_partial-> | ||
- | polytope > for (my $i=1; $i< | ||
- | 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 = hasse_diagram($p-> | ||
- | polytope > print $HD_partial-> | ||
- | 1 101 2082 12534 | ||
- | </ | ||
- | 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. |