Macaulay2 » Documentation
Packages » NumericalSchubertCalculus :: NumericalSchubertCalculus
next | previous | forward | backward | up | index | toc

NumericalSchubertCalculus -- Numerical Algorithms for Schubert Calculus

Description

This package provides implementations of both the Littlewood-Richardson and Pieri homotopy algorithms for solving (instances of) Schubert problems on Grassmannians using numerical homotopy continuation.

A Schubert problem on the Grassmannian $Gr(k,n)$ is a list of Schubert subvarieties (assumed general) of $Gr(k,n)$ whose codimensions add up to $k(n-k)$, the dimension of the Grassmannian. A Schubert variety is represented by a pair $(c,F)$, where $c$ is a Schubert condition (represented as a partition or a bracket) and $F$ is a flag, represented as an invertible $n\times n$-matrix. The Schubert variety for the pair $(c,F)$ consists of all $k$-planes that satisfy the incidence condition $c$ imposed by the flag $F$.

For a Schubert problem, we may fix one flag for each Schubert condition in the list --- i.e., describe an instance of a given Schubert problem --- and look for the solutions for this instance --- i.e., points in the intersection of the corresponding Schubert varieties. The methods of this package find approximations of these points.

General functions:

Functions implementing homotopies specific to Schubert calculus:

Service functions:

Using PHCpack:

An alternative implementation using PHCpack (download from here) includes the following functions: Note that LRcheater is similar to changeFlags
For example, the Schubert problem {2,1}$^3$ in $Gr(3,6)$ with respect to random flags has 2 solutions
i1 : k = 3; n = 6;
i3 : SchPblm = {
     	 ({2,1}, random(CC^6,CC^6)),
     	 ({2,1}, random(CC^6,CC^6)),
     	 ({2,1}, random(CC^6,CC^6))
     	 };
i4 : solveSchubertProblem(SchPblm, k,n)

o4 = {| -.973546-.443329ii  -.193482-.957391ii -.460977-.267623ii  |, |
      | .153343-.291038ii   .339479-1.30008ii  -.577303-.171329ii  |  |
      | .326239-.770744ii   .120186-1.46205ii  -.0769985-.323186ii |  |
      | -.451322-.514227ii  -.144874-.987789ii -.589493-.209825ii  |  |
      | -.0525679-.692383ii .364061-.704785ii  -.325325-.185011ii  |  |
      | -.942864-.594173ii  -.826353-.203654ii -.236865+.691374ii  |  |
     ------------------------------------------------------------------------
     -5.47422+1.18674ii -.912706-1.64344ii -.590144+.126046ii |}
     -2.80395-.714508ii -.793467-2.20255ii -.016225+.340982ii |
     -2.29873-2.34724ii -.905617-2.59114ii .0951404+.355536ii |
     -3.36313+2.14592ii -.703202-1.58202ii -.375349+.205204ii |
     -3.91243-.845457ii -.528411-.900447ii -.187047+.545512ii |
     -4.19554+1.93172ii -1.11528-.480829ii .19859+1.24706ii   |

o4 : List

References:

Authors

Version

This documentation describes version 1.17 of NumericalSchubertCalculus.

Source code

The source code from which this documentation is derived is in the file NumericalSchubertCalculus.m2. The auxiliary files accompanying it are in the directory NumericalSchubertCalculus/.

Exports

  • Functions and commands
    • bracket2partition -- dictionary between different notations for Schubert conditions.
    • changeFlags -- continue solutions of a Schubert problem to another instance
    • checkIncidenceSolution -- check if a solution satisfies an instance of a Schubert problem
    • LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
    • LRnumber -- returns the number of solutions to the given Schubert problem
    • LRrule -- computes the product of Schubert classes using geometric Littlewood-Richardson rule
    • LRtriple -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
    • NSC2phc -- dictionary between different notations for Schubert problems.
    • parseTriplet -- Parses the output from LRtriple into Macaulay2 objects.
    • partition2bracket -- dictionary between different notations for Schubert conditions.
    • PieriHomotopies -- runs the Pieri homotopies to solve a general hypersurface problem
    • PieriRootCount -- the number of solutions to a generic Pieri problem
    • printStatistics -- summary statistics (used by developers)
    • resetStatistics -- see printStatistics -- summary statistics (used by developers)
    • randomSchubertProblemInstance -- returns a random instance of a given Schubert problem
    • setVerboseLevel -- set different levels of information printed on screen
    • solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
    • solveSchubertProblem -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
    • solveSimpleSchubert -- uses Pieri homotopy algorithm to solve a simple Schubert problem
    • wrapTriplet -- Wraps a flag, system, and solutions into one string for phc -e.
  • Methods
    • bracket2partition(List,ZZ) -- see bracket2partition -- dictionary between different notations for Schubert conditions.
    • changeFlags(List,Sequence) -- see changeFlags -- continue solutions of a Schubert problem to another instance
    • changeFlags(Matrix,List,Sequence) -- recursive call of change flags
    • checkIncidenceSolution(Matrix,List) -- see checkIncidenceSolution -- check if a solution satisfies an instance of a Schubert problem
    • LRcheater(ZZ,Matrix,String) -- see LRcheater -- A cheater's homotopy to a real Schubert triple intersection problem
    • LRnumber(List,ZZ,ZZ) -- see LRnumber -- returns the number of solutions to the given Schubert problem
    • LRrule(ZZ,Matrix) -- see LRrule -- computes the product of Schubert classes using geometric Littlewood-Richardson rule
    • LRtriple(ZZ,Matrix) -- see LRtriple -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
    • NSC2phc(List,ZZ,ZZ) -- see NSC2phc -- dictionary between different notations for Schubert problems.
    • parseTriplet(String,String,String) -- see parseTriplet -- Parses the output from LRtriple into Macaulay2 objects.
    • partition2bracket(List,ZZ,ZZ) -- see partition2bracket -- dictionary between different notations for Schubert conditions.
    • PieriHomotopies(ZZ,ZZ) -- see PieriHomotopies -- runs the Pieri homotopies to solve a general hypersurface problem
    • PieriRootCount(ZZ,ZZ,ZZ) -- see PieriRootCount -- the number of solutions to a generic Pieri problem
    • randomSchubertProblemInstance(List,ZZ,ZZ) -- see randomSchubertProblemInstance -- returns a random instance of a given Schubert problem
    • setVerboseLevel(ZZ) -- see setVerboseLevel -- set different levels of information printed on screen
    • solutionsToAffineCoords(List) -- see solutionsToAffineCoords -- writes solutions in global coords to affine coordinates.
    • solveSchubertProblem(List,ZZ,ZZ) -- see solveSchubertProblem -- uses Littlewood-Richardson homotopy algorithm to solve a Schubert problem
    • solveSimpleSchubert(List,ZZ,ZZ) -- see solveSimpleSchubert -- uses Pieri homotopy algorithm to solve a simple Schubert problem
    • wrapTriplet(String,String,String) -- see wrapTriplet -- Wraps a flag, system, and solutions into one string for phc -e.
  • Symbols
    • OneHomotopy -- strategy for changing flags.
    • RandomSeed -- seed for the random number generators.
    • WorkingPrecision -- option to raise the working precision to double double or quad double.

For the programmer

The object NumericalSchubertCalculus is a package.