This tutorial is probably also available as a Jupyter notebook in the demo
folder in the polymake source and on github.
Different versions of this tutorial: latest release, release 4.11, release 4.10, release 4.9, release 4.8, release 4.7, release 4.6, release 4.5, release 4.4, release 4.3, release 4.2, release 4.1, release 4.0, release 3.6, nightly master
This is an old revision of the document!
Tutorial: Tropical arithmetics and tropical geometry
This tutorial showcases the main features of application tropical, such as
- Tropical arithmetics
- Tropical convex hull computations
- Tropical cycles and hypersurfaces.
Disclaimer: Min or Max - you have to choose!
Most objects and data types related to tropical computations have a template parameter which tells it whether Min or Max is used as tropical addition. There is no default for this, so you have to choose!
Tropical arithmetics
You can create an element of the tropical semiring (over the rationals) simply by writing something like this:
tropical > $a = new TropicalNumber<Max>(4); tropical > $b = new TropicalNumber<Min>(4); tropical > $c = new TropicalNumber<Min>("inf");
You can now do basic arithmetic - that is tropical addition and multiplication with these. Note that tropical numbers with different tropical additions don't mix!
tropical > print $a * $a; 8 tropical > print $b + $c*$b; 4 tropical > #print $a + $b; This won't work!
Tropical vector/matrix arithmetics also work - you can even ask for the tropical determinant!
tropical > $m = new Matrix<TropicalNumber<Max> >([[0,1,2],[0,"-inf",3],[0,0,"-inf"]]); tropical > $v = new Vector<TropicalNumber<Max> >(1,1,2); tropical > print $m + $m; 0 1 2 0 -inf 3 0 0 -inf tropical > print $m * $v; 4 5 1 tropical > print tdet($m); 4
Finally, you can also create tropical polynomials. This can either be done in the usual manner or with a special parser:
tropical > $r = new Ring<TropicalNumber<Min> >(3); #Tropical polynomial ring in 3 variables tropical > ($x, $y, $z) = $r->variables; tropical > $p = $x*$x + $y * $z; tropical > print $p; x0^2 + x1*x2 tropical > $q = toTropicalPolynomial("min(2a,b+c)"); tropical > print $q; x0^2 + x1*x2
Tropical convex hull computations
The basic object for tropical convex hull computations is Cone
(Careful: If you're not in application tropical, be sure to use the namespace identifier tropical::Cone
to distinguish it from the polytope::Cone
).
A tropical cone should always be created via POINTS
:
tropical > $c = new Cone<Min>(POINTS=>[[0,0,0],[0,2,1]]);