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

jacobiTrudi -- Jacobi-Trudi determinant

Description

Given a partition lambda and Symmetric ring R, the method evaluates the Jacobi-Trudi determinant corresponding to the partition lambda, yielding a representation of the Schur function s_{lambda} as a symmetric function in R. The default option is to represent this symmetric function in terms of e-polynomials.

i1 : R = symmetricRing(QQ,10);
i2 : jacobiTrudi({3,2,2,1},R)

               2
o2 = e e e  - e  - e e e  + e e
      1 3 4    4    1 2 5    2 6

o2 : R
i3 : jacobiTrudi(new Partition from {4,4,1},R,EorH => "H")

        2
o3 = h h  - h h h  - h h  + h h
      1 4    1 3 5    4 5    3 6

o3 : R
i4 : toS oo

o4 = s
      4,4,1

o4 : schurRing (QQ, s, 10)

Selecting EorH => "H" uses the conjugate determinant formula $s_\lambda = \det(h_{\lambda_i - i + j})$. The two branches produce different e- vs h-polynomials but always represent the same Schur function:

i5 : R = symmetricRing(QQ,8);
i6 : lam = {4,3,2,1};
i7 : fe = jacobiTrudi(lam,R,EorH => "E");
i8 : fh = jacobiTrudi(lam,R,EorH => "H");
i9 : toS fe

o9 = s
      4,3,2,1

o9 : schurRing (QQ, s, 8)
i10 : toS fh

o10 = s
       4,3,2,1

o10 : schurRing (QQ, s, 8)
i11 : toS fe == toS fh

o11 = true

The routine caches intermediate subdeterminants on the ring via jacobiTrudi(...,Memoize=>...), so a second call on a large partition returns almost instantly:

i12 : R = symmetricRing(QQ,6);
i13 : elapsedTime jacobiTrudi({4,3,2,1},R);
 -- .000388909s elapsed
i14 : elapsedTime jacobiTrudi({4,3,2,1},R);
 -- .000012854s elapsed

Passing a partition through toSymm applied to the corresponding Schur label reproduces the Jacobi-Trudi output:

i15 : R = symmetricRing(QQ,5);
i16 : S = schurRing R;
i17 : jacobiTrudi({3,2,1},R) == toSymm(S_{3,2,1})

o17 = true

jacobiTrudi works over tensor products of Symmetric rings, producing a determinant in the outermost set of generators:

i18 : R = symmetricRing(QQ, 4, EHPVariables => (a,b,c));
i19 : T = symmetricRing(R, 3, EHPVariables => (x,y,z));
i20 : jacobiTrudi({2,1},T)

o20 = x x  - x
       1 2    3

o20 : T
i21 : jacobiTrudi({3,2},T, EorH => "H")

o21 = y y
       2 3

o21 : T

Ways to use jacobiTrudi:

  • jacobiTrudi(BasicList,Ring)

For the programmer

The object jacobiTrudi is a method function with options.


The source of this document is in /build/reproducible-path/macaulay2-1.26.05+ds/M2/Macaulay2/packages/SchurRings.m2:6102:0.