user_guide:tutorials:polynomials_tutorial

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
tutorial:polynomials_tutorial [2010/02/08 09:56] – created joswiguser_guide:tutorials:polynomials_tutorial [2019/01/25 09:38] – ↷ Page moved from user_guide:polynomials_tutorial to user_guide:tutorials:polynomials_tutorial oroehrig
Line 1: Line 1:
-===== Basic Usage of Polynomials in Perl =====+A short note on variable naming up front: You can alter the settings for the names that are used for polynomial variables in parsing them from strings or for pretty-printing using the ''set_var_names'' or ''local_var_names'' functions. Refer to their [[https://polymake.org/release_docs/master/common.html#common__set_var_names__239|documentation]] for defaults and usage information. To restore the default settings to your ''customize.pl'', type this: 
 +<code> 
 +> reset_custom %polynomial_var_names; 
 +</code>
  
-The following will be available starting from version 2.9.8.+===== Usage of Polynomials in Perl ===== 
 +===Constructors=== 
 +The easiest way to create a simple [[https://polymake.org/release_docs/master/common.html#common__Polynomial__339 | Polynomial]] object is through a string: 
 +<code> 
 +> $p = new Polynomial("4 + 3x_1 + x_2^5"); 
 +</code> 
 +Sometimes it's convenient to use the constructor that takes a vector of coefficients and a matrix of exponents: 
 +<code> 
 +> $coeff = new Vector([9,-5]); 
 +> $exp = new Matrix<Int>([[0,4],[8,3]]); 
 +> $p2 = new Polynomial($coeff, $exp); 
 +> print $p2; 
 +-5*x_0^8*x_1^3 + 9*x_1^4 
 +</code> 
 +There is a seperate type for univariate polynomials, called [[https://polymake.org/release_docs/master/common.html#common__UniPolynomial__342 | UniPolynomial]]. 
 +<code> 
 +> $up = new UniPolynomial("3x + 2x^2 + 4"); 
 +</code>
  
-A polynomial always carries a reference to a polynomial ring Polynomial in different rings cannot be addedmultipliedor whatever.  The names of the indeterminates are relevant for the output functions only.+Polynomials (and UniPolynomials) are templated by their coefficient and exponent types, defaulting to Rational for coefficients and Int for exponentsYou can even have polynomials of polynomials (of polynomials...). 
 +<code> 
 +> $pp = new UniPolynomial<UniPolynomial<Rational,Int>,Rational>("(4x^2+5)y3/2 - 5/3x4y2/3"); 
 +> print $pp; 
 +(4*x^2 + 5)*y^3/2 + (-5/3*x^4)*y^2/
 +</code> 
 +===Computations=== 
 +The standard arithmetic functions "+", "-", "*", "^" are defined for polynomials of matching type. 
 +<code> 
 +> print $p + ($p^2); 
 +9*x_1^2 + 6*x_1*x_2^5 + 27*x_1 + x_2^10 + 9*x_2^5 + 20 
 +</code> 
 +However, note that due to the fact that their precedence is given in perl, it may be necessary to write more parentheses than expected at first sight. For exampleas aboveyou always have to write "($p^2)" because of the lower precedence of the "^" operator... 
 +<code> 
 +> print $p + $p^2; 
 +36*x_1^2 + 24*x_1*x_2^5 + 96*x_1 + 4*x_2^10 + 32*x_2^5 + 64 
 +</code> 
 +For UniPolynomials, we even have polynome division: 
 +<code> 
 +> print (($up^2)/$up); 
 +(2*x^2 + 3*x + 4)/(1) 
 +</code>
  
 +===Example: Newton Polynomials===
 +Here is one way to produce polytopes from polynomials (as the convex hull of the exponent vectors of all terms).
 <code> <code>
-$r=new Ring(qw(x y));+polytope > $np newton($p*($p+$p)); 
 +polytope > print $np->VERTICES; 
 +1 0 0 0 
 +1 0 2 0 
 +1 0 0 10 
 +polytope > print equal_polyhedra($np,minkowski_sum(newton($p),newton($p+$p))); 
 +1
 </code> </code>
  
-It may be convenient to use special variable names for the indeterminates.+The final "1" means "true": The Newton polytope of the product of two polynomials always equals the Minkowski sum of the Newton polytopes of the factors. 
 + 
 +=== Example: Toric Degeneration === 
 + 
 +The following describes how to construct the polynomial which describes the toric deformation with respect to a point configuration and a height function This is the input data:
  
 <code> <code>
-polytope> ($x,$y)=$r->variables;+polytope > $points = new Matrix<Int>([1,0],[0,1])
 +polytope > $height new Vector<Int>([2,3]); 
 +polytope > $coefficients = new Vector<Rational>([-1/2,1/3]);
 </code> </code>
  
-Notice that the variable names are chosen to match the print names; but this is "coincidental".+The following is generic (assuming that the dimensions of the objects above match).
  
 <code> <code>
-polytope> $p=1+$x+$y; +polytope > $p = new Polynomial($coefficients,$height|$points);
-polytope> $q=1+$x+$y+$x*$y; +
-polytope> print($p*$q); +
-1 + 2*x + x^2 + 2*y + 3*x*y + y^2 + x^2*y + x*y^2+
 </code> </code>
  
-Standard arithmetic function "+""-""*", "^" are defined Howeverdue to the fact the their precedence is given in perl it may be necessary to write more parentheses than expected at first sight. +Notice that the points are given in Euclidean coordinates; that isif appliede.g., to the VERTICES of a polytope do not forget to strip the homogenizing coordinateThe output in our example looks like this:
- +
-Here is one way to produce polytopes from polynomials (as the convex hull of the exponent vectors of all terms).+
  
 <code> <code>
-polytope> $npq=newton($p*$q)+polytope > print $p; 
-polytope> print $npq->VERTICES; +1/3*s^3*x2 -1/2*s^2*x1
-1 0 0 +
-1 2 +
-1 0 2 +
-1 2 1 +
-1 1 2 +
-polytope> print equal_polyhedra($npq, minkowski_sum(newton($p),newton($q))); +
-1+
 </code> </code>
  
-The final "1" means "true": The Newton polytope of the product of two polynomials always equals the Minkowski sum of the Newton polytopes of the factors. 
  
  • user_guide/tutorials/polynomials_tutorial.txt
  • Last modified: 2019/02/04 22:55
  • by 127.0.0.1