Movatterモバイル変換


[0]ホーム

URL:


The‘jack’ package: Jack and other symmetric polynomials

Jack, zonal, Schur, and other symmetricpolynomials.

R-CMD-checkR-CMD-check-valgrind

library(jack)

Schur polynomials have applications in combinatorics andzonal polynomials have applications in multivariate statistics.They are particular cases ofJack polynomials,which are some multivariate symmetric polynomials. The original purposeof this package was the evaluation and the computation in symbolic formof these polynomials. Now it contains much more stuff dealing withmultivariate symmetric polynomials.

Breaking change in version6.0.0

In version 6.0.0, each function whose name ended with the suffixCPP (JackCPP,JackPolCPP, etc.)has been renamed by removing this suffix, and the functionsJack,JackPol, etc. have been renamed byadding the suffixR to their name:JackR,JackPolR, etc. The reason of these changes is that a namelikeJack is more appealing thanJackCPP andit is more sensible to assign the more appealing names to the functionsimplemented withRcpp since they are highly moreefficient. The interest of the functionsJackR,JackPolR, etc. is meager.

Getting the polynomials

The functionsJackPol,ZonalPol,ZonalQPol andSchurPol respectively return theJack polynomial, the zonal polynomial, the quaternionic zonalpolynomial, and the Schur polynomial.

Each of these polynomials is given by a positive integer, the numberof variables (then argument), and an integer partition(thelambda argument); the Jack polynomial has a parameterin addition, thealpha argument, a number called theJack parameter.

Actually there are four possible Jack polynomials for a given Jackparameter and a given integer partition: the\(J\)-polynomial, the\(P\)-polynomial, the\(Q\)-polynomial and the\(C\)-polynomial. You can specify which oneyou want with thewhich argument, which is set to"J" by default. These four polynomials differ only by aconstant factor.

To get a Jack polynomial withJackPol, you have tosupply the Jack parameter as abigq rational number oranything coercible to abigq number by an application oftheas.bigq function of thegmp package,such as a character string representing a fraction,e.g. "2/5":

jpol<-JackPol(2,lambda =c(3,1),alpha ="2/5")jpol## 98/25*x^3.y + 28/5*x^2.y^2 + 98/25*x.y^3

This is aqspray object, from theqspraypackage. Here is how you can evaluate this polynomial:

evalQspray(jpol,c("2","3/2"))## Big Rational ('bigq') :## [1] 1239/10

It is also possible to convert aqspray polynomial to afunction whose evaluation is performed by theRyacaspackage:

jyacas<-as.function(jpol)

You can provide the values of the variables of this function asnumbers or character strings:

jyacas(2,"3/2")## [1] "1239/10"

You can even pass a variable name to this function:

jyacas("x","x")## [1] "(336*x^4)/25"

If you want to substitute a complex number to a variable, use acharacter string which represents this number, withIdenoting the imaginary unit:

jyacas("2 + 2*I","2/3 + I/4")## [1] "Complex((-158921)/2160,101689/2160)"

It is also possible to evaluate aqspray polynomial forsome complex values of the variables withevalQspray. Youhave to separate the real parts and the imaginary parts:

evalQspray(jpol,values_re =c("2","2/3"),values_im =c("2","1/4"))## Big Rational ('bigq') object of length 2:## [1] -158921/2160 101689/2160

Direct evaluation of thepolynomials

If you just have to evaluate a Jack polynomial, you don’t need toresort to aqspray polynomial: you can use the functionsJack,Zonal,ZonalQ orSchur, which directly evaluate the polynomial; this is muchmore efficient than computing theqspray polynomial andthen applyingevalQspray.

Jack(c("2","3/2"),lambda =c(3,1),alpha ="2/5")## Big Rational ('bigq') :## [1] 1239/10

However, if you have to evaluate a Jack polynomial for severalvalues, it could be better to resort to theqspraypolynomial.

Skew Jack polynomials

As of version 6.0.0, the package is able to compute the skew Schurpolynomials with the functionSkewSchurPol, and the generalskew Jack polynomial is available as of version 6.1.0 (functionSkewJackPol).

Symbolic Jack parameter

As of version 6.0.0, it is possible to get a Jack polynomial with asymbolic Jack parameter in its coefficients, thanks to thesymbolicQspraypackage.

( J<-JackSymPol(2,lambda =c(3,1)) )## { [ 2*a^2 + 4*a + 2 ] } * X^3.Y  +  { [ 4*a + 4 ] } * X^2.Y^2  +  { [ 2*a^2 + 4*a + 2 ] } * X.Y^3

This is asymbolicQspray object, from thesymbolicQspray package.

AsymbolicQspray object corresponds to a multivariatepolynomial whose coefficients are fractions of polynomials with rationalcoefficients. The variables of these fractions of polynomials can beseen as some parameters. The Jack polynomials fit into this category:from their definition, their coefficients are fractions of polynomialsin the Jack parameter. However you can see in the above output that forthis example, the coefficients arepolynomials in the Jackparameter (a): there’s no fraction. Actually this fact isalways true for the Jack\(J\)-polynomials. This is an establishedfact and it is not obvious (it is a consequence of theKnop & Sahi formula).

You can substitute a value to the Jack parameter with the help of thesubstituteParameters function:

( J5<-substituteParameters(J,5) )## 72*X^3.Y + 24*X^2.Y^2 + 72*X.Y^3
J5==JackPol(2,lambda =c(3,1),alpha ="5")## [1] TRUE

Note that you can change the letters used to denote the variables. Bydefault, the Jack parameter is denoted bya and thevariables are denoted byX,Y,Zif there are no more than three variables, otherwise they are denoted byX1,X2, … Here is how to change thesesymbols:

showSymbolicQsprayOption(J,"a")<-"alpha"showSymbolicQsprayOption(J,"X")<-"x"J## { [ 2*alpha^2 + 4*alpha + 2 ] } * x1^3.x2  +  { [ 4*alpha + 4 ] } * x1^2.x2^2  +  { [ 2*alpha^2 + 4*alpha + 2 ] } * x1.x2^3

If you want to have the variables denoted byx andy, do:

showSymbolicQsprayOption(J,"showMonomial")<-showMonomialXYZ(c("x","y"))J## { [ 2*alpha^2 + 4*alpha + 2 ] } * x^3.y  +  { [ 4*alpha + 4 ] } * x^2.y^2  +  { [ 2*alpha^2 + 4*alpha + 2 ] } * x.y^3

The skew Jack polynomials with a symbolic Jack parameter areavailable too, as of version 6.1.0.

Compact expression ofJack polynomials

The expression of a Jack polynomial in the canonical basis can belong. Since these polynomials are symmetric, one can get a considerablyshorter expression by writing the polynomial as a linear combination ofthe monomial symmetric polynomials. This is what the functioncompactSymmetricQspray does:

( J<-JackPol(3,lambda =c(4,3,1),alpha ="2") )## 3888*x^4.y^3.z + 2592*x^4.y^2.z^2 + 3888*x^4.y.z^3 + 3888*x^3.y^4.z + 4752*x^3.y^3.z^2 + 4752*x^3.y^2.z^3 + 3888*x^3.y.z^4 + 2592*x^2.y^4.z^2 + 4752*x^2.y^3.z^3 + 2592*x^2.y^2.z^4 + 3888*x.y^4.z^3 + 3888*x.y^3.z^4
compactSymmetricQspray(J)|>cat()## 3888*M[4, 3, 1] + 2592*M[4, 2, 2] + 4752*M[3, 3, 2]

The functioncompactSymmetricQspray is also applicableto asymbolicQspray object, like a Jack polynomial withsymbolic Jack parameter.

It is easy to figure out what is a monomial symmetric polynomial:M[i, j, k] is the sum of all monomialsx^p.y^q.z^r where(p, q, r) is a permutationof(i, j, k).

The “compact expression” of a Jack polynomial withnvariables does not depend onn ifn >= sum(lambda):

lambda<-c(3,1)alpha<-"3"J4<-JackPol(4, lambda, alpha)J9<-JackPol(9, lambda, alpha)compactSymmetricQspray(J4)|>cat()## 32*M[3, 1] + 16*M[2, 2] + 28*M[2, 1, 1] + 24*M[1, 1, 1, 1]
compactSymmetricQspray(J9)|>cat()## 32*M[3, 1] + 16*M[2, 2] + 28*M[2, 1, 1] + 24*M[1, 1, 1, 1]

In fact I’m not sure the Jack polynomial makes sense whenn < sum(lambda).

Hall inner product

Theqspray package provides a function to computethe Hall inner product of two symmetric polynomials, namelyHallInnerProduct. This is the generalized Hall innerproduct, the one with a parameter\(\alpha\). It is known that the Jackpolynomials with parameter\(\alpha\)are orthogonal for the Hall inner product with parameter\(\alpha\). Let’s give a try:

alpha<-"3"J1<-JackPol(4,lambda =c(3,1), alpha,which ="P")J2<-JackPol(4,lambda =c(2,2), alpha,which ="P")HallInnerProduct(J1, J2, alpha)## Big Rational ('bigq') :## [1] 0
HallInnerProduct(J1, J1, alpha)## Big Rational ('bigq') :## [1] 135/8
HallInnerProduct(J2, J2, alpha)## Big Rational ('bigq') :## [1] 63/5

If you setalpha=NULL inHallInnerProduct,you get the Hall inner product with symbolic parameter\(\alpha\):

HallInnerProduct(J1, J1,alpha =NULL)## 3/128*alpha^4 + 1/4*alpha^3 + 63/128*alpha^2 + 81/64*alpha

This is aqspray object. The Hall inner product isalways polynomial in\(\alpha\).

It is also possible to get the Hall inner product of twosymbolicQspray polynomials. Take for example a Jackpolynomial with symbolic parameter:

J<-JackSymPol(4,lambda =c(3,1),which ="P")showSymbolicQsprayOption(J,"a")<-"t"HallInnerProduct(J, J,alpha =2)## [ 20*t^4 - 24*t^3 + 92*t^2 - 48*t + 104 ] %//% [ t^4 + 4*t^3 + 6*t^2 + 4*t + 1 ]

We uset to display the Jack parameter and notalpha so that there is no confusion between the Jackparameter and the parameter of the Hall product.

Now, what happens if we compute the symbolic Hall inner product ofthis Jack polynomial with itself, that is, if we runHallInnerProduct(J, J, alpha = NULL)? Let’s see:

( Hip<-HallInnerProduct(J, J,alpha =NULL) )## { [ 6 ] %//% [ t^4 + 4*t^3 + 6*t^2 + 4*t + 1 ] } * alpha^4  +  { [ 9*t^2 - 6*t + 1 ] %//% [ t^4 + 4*t^3 + 6*t^2 + 4*t + 1 ] } * alpha^3  +  { [ 3*t^4 - 6*t^3 + 5*t^2 ] %//% [ t^4 + 4*t^3 + 6*t^2 + 4*t + 1 ] } * alpha^2  +  { [ 4*t^4 ] %//% [ t^4 + 4*t^3 + 6*t^2 + 4*t + 1 ] } * alpha

We get the Hall inner product of the Jack polynomial with itself,with two symbolic parameters: the Jack parameter displayed ast and the parameter of the Hall product displayed asalpha. This is asymbolicQspray object.

Now one could be interested in the symbolic Hall inner product of theJack polynomial with itself for the case when the Jack parameter and theparameter of the Hall product coincide, that is, to setalpha=t in thesymbolicQspray polynomial thatwe namedHip. One can get it as follows:

changeVariables(Hip,list(qlone(1)))## [ 3*t^4 + t^3 ] %//% [ t^2 + 2*t + 1 ]

This is rather a trick. ThechangeVariables functionallows to replace the variables of asymbolicQspraypolynomial with the new variables given as a list in its secondargument. TheHip polynomial has only one variable,alpha, and it has one parameter,t. Thisparametert is the polynomial variable of theratioOfQsprays coefficients ofHip.Technically this is aqspray object: this isqlone(1). So we providedlist(qlone(1)) as thelist of new variables. This corresponds to setalpha=t. Theusage of thechangeVariables is a bit deflected, becauseqlone(1) is not a new variable forHip, thisis a constant.

Laplace-Beltrami operator

Just to illustrate the possibilities of the packages involved in thejack package (qspray,ratioOfQsprays,symbolicQspray), letus check that the Jack polynomials are eigenpolynomials for theLaplace-Beltrami operator on thespace of homogeneous symmetric polynomials.

LaplaceBeltrami<-function(qspray, alpha) {  n<-numberOfVariables(qspray)  derivatives1<-lapply(seq_len(n),function(i) {derivQspray(qspray, i)  })  derivatives2<-lapply(seq_len(n),function(i) {derivQspray(derivatives1[[i]], i)  })  x<-lapply(seq_len(n), qlone)# x_1, x_2, ..., x_n# first term  out1<- 0Lfor(iinseq_len(n)) {    out1<- out1+ alpha* x[[i]]^2* derivatives2[[i]]  }# second term  out2<- 0Lfor(iinseq_len(n)) {for(jinseq_len(n)) {if(i!= j) {        out2<- out2+ x[[i]]^2* derivatives1[[i]]/ (x[[i]]- x[[j]])      }    }  }# at this step, `out2` is a `ratioOfQsprays` object, because of the divisions# by `x[[i]] - x[[j]]`; but actually its denominator is 1 because of some# simplifications and then we extract its numerator to get a `qspray` object  out2<-getNumerator(out2)  out1/2+ out2}
alpha<-"3"J<-JackPol(4,c(2,2), alpha)collinearQsprays(qspray1 =LaplaceBeltrami(J, alpha),qspray2 = J)## [1] TRUE

Other symmetric polynomials

Many other symmetric multivariate polynomials have been introduced inversion 6.1.0. Let’s see a couple of them.

Skew Jack polynomials

The skew Jack polynomials are now available. They generalize the skewSchur polynomials. In order to specify the skew integer partition\(\lambda/\mu\), one has to provide the outerpartition\(\lambda\) and the innerpartition\(\mu\). The skew Schurpolynomial associated to some skew partition is the skew Jack\(P\)-polynomial with Jack parameter\(\alpha=1\) associated to the same skewpartition:

n<-3lambda<-c(3,3)mu<-c(2,1)skewSchurPoly<-SkewSchurPol(n, lambda, mu)skewJackPoly<-SkewJackPol(n, lambda, mu,alpha =1,which ="P")skewSchurPoly== skewJackPoly## [1] TRUE

\(t\)-Schur polynomials

The\(t\)-Schur polynomials dependon a single parameter usually denoted by\(t\) and their coefficients are polynomialsin this parameter. They yield the Schur polynomials when substituting\(t\) with\(0\):

n<-3lambda<-c(2,2)tSchurPoly<-tSchurPol(n, lambda)substituteParameters(tSchurPoly,values =0)==SchurPol(n, lambda)## [1] TRUE

Hall-Littlewood polynomials

Similarly to the\(t\)-Schurpolynomials, the Hall-Littlewood polynomials depend on a singleparameter usually denoted by\(t\) andtheir coefficients are polynomials in this parameter. TheHall-Littlewood\(P\)-polynomials yieldthe Schur polynomials when substituting\(t\) with\(0\):

n<-3lambda<-c(2,2)hlPoly<-HallLittlewoodPol(n, lambda,which ="P")substituteParameters(hlPoly,values =0)==SchurPol(n, lambda)## [1] TRUE

Macdonald polynomials

The Macdonald polynomials depend on two parameters usually denoted by\(q\) and\(t\). Their coefficients are not polynomialsin\(q\) and\(t\) in general, they are ratios ofpolynomials in\(q\) and\(t\). These polynomials yield theHall-Littlewood polynomials when substituting\(q\) with\(0\):

n<-3lambda<-c(2,2)macPoly<-MacdonaldPol(n, lambda)hlPoly<-HallLittlewoodPol(n, lambda)changeParameters(macPoly,list(0,qlone(1)))== hlPoly## [1] TRUE

Kostka numbers and Kostkapolynomials

The ordinary Kostka numbers are usually denoted by\(K_{\lambda,\mu}\) where\(\lambda\) and\(\mu\) denote two integer partitions. TheKostka number\(K_{\lambda,\mu}\) isthen associated to the two integer partitions\(\lambda\) and\(\mu\), and it is the coefficient of themonomial symmetric polynomial\(m_{\mu}\) in the expression of the Schurpolynomial\(s_{\lambda}\) as a linearcombination of monomial symmetric polynomials. It is always anon-negative integer. It is possible to compute these Kostka numberswith thejack package. They are also available in thesytpackage. There is more in thejack package. Sincethe Schur polynomials are the Jack\(P\)-polynomials with Jack parameter\(\alpha=1\), one can more generally definetheKostka-Jack number\(K_{\lambda,\mu}(\alpha)\) as thecoefficient of the monomial symmetric polynomial\(m_{\mu}\) in the expression of the Jack\(P\)-polynomial\(P_{\lambda}(\alpha)\) with Jack parameter\(\alpha\) as a linear combination ofmonomial symmetric polynomials. Thejack package allowsto compute these numbers. Note that I call them “Kostka-Jack numbers”here as well as in the documentation of the package but I don’t knowwhether this wording is standard (probably not).

The Kostka numbers are also generalized by theKostka-Foulkespolynomials, or\(t\)-Kostkapolynomials, which are provided in thejackpackage. These are univariate polynomials whose variable is denoted by\(t\), and their value at\(t=1\) are the Kostka numbers. Thesepolynomials are used in the computation of the Hall-Littlewoodpolynomials.

Finally, the Kostka numbers are also generalized by theKostka-Macdonald polynomials, or\(qt\)-Kostka polynomials, also providedin thejack package. Actually these polynomials evengeneralize the Kostka-Foulkes polynomials. They have two variables,denoted by\(q\) and\(t\), and one obtains the Kostka-Foulkespolynomials by replacing\(q\) with\(0\). Currently the Kostka-Macdonaldpolynomials are not used in thejack package.

The skew generalizations are also available in thejack package: skew Kostka-Jack numbers, skewKostka-Foulkes polynomials, and skew Kostka-Macdonald polynomials.

References


[8]ページ先頭

©2009-2025 Movatter.jp