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.

Citation

If you have used this package in your research, please cite it as follows:

@misc{NumericalSchubertCalculusSource,
  title = {{NumericalSchubertCalculus: numerical methods in Schubert Calculus. Version~1.17}},
  author = {Anton Leykin and Abraham Martin del Campo and Frank Sottile and Ravi Vakil and Jan Verschelde},
  howpublished = {A \emph{Macaulay2} package available at
    \url{https://github.com/Macaulay2/M2/tree/master/M2/Macaulay2/packages}}
}

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, defined in NumericalSchubertCalculus.m2, with auxiliary files in NumericalSchubertCalculus/.


The source of this document is in NumericalSchubertCalculus/doc.m2:81:0.