next | previous | forward | backward | up | top | index | toc | Macaulay2 website
NumericalSchubertCalculus :: changeFlags

changeFlags -- continue solutions of a Schubert problem to another instance

Synopsis

Description

If sols is a set of solutions to a Schubert problem $l_1,\ldots,l_m$ with respect to a set of flags $F_1,\ldots, F_m$, uses parameter homotopies to move $S$ to a solution set $S'$ for the same Schubert problem, but with respect to another set of flags $G_1,\ldots, G_m$.

For instance, consider the Schubert problem $(2,1)^3$ in $Gr(3,6)$.

i1 : k=3; n=6;
i3 : l1={2,1};
i4 : l2={2,1};
i5 : l3={2,1};

Generate flags $F$: standard flag, opposite flag, and one random.

i6 : F = {(l1, id_(CC^n)), (l2, rsort id_(CC^n)), (l3,random(CC^n,CC^n))}

o6 = {({2, 1}, | 1 0 0 0 0 0 |), ({2, 1}, | 0 0 0 0 0 1 |), ({2, 1}, |
               | 0 1 0 0 0 0 |            | 0 0 0 0 1 0 |            |
               | 0 0 1 0 0 0 |            | 0 0 0 1 0 0 |            |
               | 0 0 0 1 0 0 |            | 0 0 1 0 0 0 |            |
               | 0 0 0 0 1 0 |            | 0 1 0 0 0 0 |            |
               | 0 0 0 0 0 1 |            | 1 0 0 0 0 0 |            |
     ------------------------------------------------------------------------
     .892712+.673395ii  .0741835+.808694ii .830833+.538554ii 
     .29398+.632944ii   .362835+.706096ii  .873665+.415912ii 
     .0258884+.714827ii .127435+.254482ii  .606588+.848005ii 
     .89189+.231053ii   .741046+.108386ii  .191734+.403215ii 
     .461944+.775187ii  .348931+.562428ii  .615911+.0147867ii
     .909047+.314897ii  .246268+.153346ii  .223028+.388829ii 
     ------------------------------------------------------------------------
     .557119+.873708ii .0647412+.877846ii .444183+.644366ii |)}
     .7037+.681869ii   .0340514+.507989ii .194945+.518585ii |
     .276259+.605659ii .150294+.656391ii  .987173+.568273ii |
     .96518+.681683ii  .174853+.626892ii  .184779+.370833ii |
     .914199+.887381ii .350611+.379495ii  .339222+.062212ii |
     .169813+.965004ii .237252+.116721ii  .465736+.40273ii  |

o6 : List

Generate a random set of flags $G$.

i7 : G = randomSchubertProblemInstance({l1,l2,l3},k,n);

We solve with respect to $F$.

i8 : S = solveSchubertProblem(F,k,n);
i9 : FlagsF = F/last;
i10 : FlagsG = G/last;

and we transform the solutions to get solutions with respect to $G$

i11 : time S' = changeFlags(S,({l1,l2,l3},FlagsF,FlagsG))
     -- used 2.61738 seconds

o11 = {| .124063-.286284ii   .167867-.0639299ii  .295488-.366109ii   |, |
       | -.25181-.0448108ii  -.107521-.190275ii  -.0896067-.483543ii |  |
       | .219256+.214331ii   .0873511+.372915ii  -.213803+.410917ii  |  |
       | .24818-.0567624ii   .138074+.069527ii   -.446051+.0426311ii |  |
       | -.122857+.030327ii  -.0079778-.488031ii .214077+.374278ii   |  |
       | -.402855+.0597291ii -.43662-.200568ii   -.254234+.748617ii  |  |
      -----------------------------------------------------------------------
      -.00839714-.407126ii .205329-.387394ii  .424542-.396438ii  |}
      .192354-.0445916ii   .719274+.437354ii  .49019+.0178286ii  |
      -.396883+.032256ii   -.296361-.56774ii  -.362153+.372505ii |
      .153499+.396506ii    -.494939+.496139ii -.411614+.315486ii |
      -.282532+.248918ii   -.874085+.276867ii -.807461+.498361ii |
      .0284784+.374339ii   -.588673+.906394ii -.233277+.814607ii |

o11 : List
i12 : assert all(S', s-> checkIncidenceSolution(s,G))

We can also choose a different strategy

i13 : time S' = changeFlags(S,({l1,l2,l3},FlagsF,FlagsG), OneHomotopy=>false)
     -- used 1.52701 seconds

o13 = {| -.226702-.119043ii  -.326452-.119841ii  .0929953-.230085ii |, |
       | -.229738+.0833434ii -.445398+.0639826ii .150646-.436884ii  |  |
       | .279834-.0761677ii  .402182-.016251ii   -.178732+.299631ii |  |
       | -.119002+.197573ii  -.108802+.642985ii  -.820159-.281606ii |  |
       | -.134096+.0372165ii -.127528-.0349071ii .204901-.0516554ii |  |
       | .499185+.465779ii   1.13857+.442385ii   -.50217+1.18715ii  |  |
      -----------------------------------------------------------------------
      .132399-.579396ii   .78366-.359334ii   -.647254+1.41489ii  |}
      -.0614253+.257063ii -.356136+.210321ii .116836-.599086ii   |
      .127487-.876713ii   .739985-1.32758ii  .872113+1.6876ii    |
      -.103026+.750164ii  -.798533+.84669ii  -.0252049-1.72596ii |
      -.0428908-.187959ii .27551-.59017ii    .739685+.785045ii   |
      -.236198+.0362704ii -.341298-.374585ii .878579-.176735ii   |

o13 : List
i14 : assert all(S', s-> checkIncidenceSolution(s,G))

Caveat

There are two strategies: when OneHomotopy is set to true (default) it uses straight line homotopies to change flags, but assumes the initial flags are generic.

When OneHomotopy is set to false, it makes gradual changes in the flags by changing one column at a time, and using only linear homotopies, but in this setting, it generates polynomial equations using all minors of the incidence conditions (thus is not very effective).

See also

Ways to use changeFlags :

For the programmer

The object changeFlags is a method function with options.