Jack, zonal, Schur, and other symmetricpolynomials.
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.
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.
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: 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^3This is aqspray object, from theqspraypackage. Here is how you can evaluate this polynomial:
evalQspray(jpol,c("2","3/2"))## Big Rational ('bigq') :## [1] 1239/10It 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/2160If 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/10However, if you have to evaluate a Jack polynomial for severalvalues, it could be better to resort to theqspraypolynomial.
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).
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^3This 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
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^3J5==JackPol(2,lambda =c(3,1),alpha ="5")## [1] TRUENote 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^3If 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^3The skew Jack polynomials with a symbolic Jack parameter areavailable too, as of version 6.1.0.
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^4compactSymmetricQspray(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).
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<-"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] 0HallInnerProduct(J1, J1, alpha)## Big Rational ('bigq') :## [1] 135/8HallInnerProduct(J2, J2, alpha)## Big Rational ('bigq') :## [1] 63/5If you setalpha=NULL inHallInnerProduct,you get the Hall inner product with symbolic parameter
HallInnerProduct(J1, J1,alpha =NULL)## 3/128*alpha^4 + 1/4*alpha^3 + 63/128*alpha^2 + 81/64*alphaThis 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 ] } * alphaWe 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.
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] TRUEMany other symmetric multivariate polynomials have been introduced inversion 6.1.0. Let’s see a couple of them.
The skew Jack polynomials are now available. They generalize the skewSchur polynomials. In order to specify the skew integer partition
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] TRUEThe\(t\)-Schur polynomials dependon a single parameter usually denoted by
n<-3lambda<-c(2,2)tSchurPoly<-tSchurPol(n, lambda)substituteParameters(tSchurPoly,values =0)==SchurPol(n, lambda)## [1] TRUESimilarly 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
n<-3lambda<-c(2,2)hlPoly<-HallLittlewoodPol(n, lambda,which ="P")substituteParameters(hlPoly,values =0)==SchurPol(n, lambda)## [1] TRUEThe Macdonald polynomials depend on two parameters usually denoted by\(q\) and
n<-3lambda<-c(2,2)macPoly<-MacdonaldPol(n, lambda)hlPoly<-HallLittlewoodPol(n, lambda)changeParameters(macPoly,list(0,qlone(1)))== hlPoly## [1] TRUEThe ordinary Kostka numbers are usually denoted by
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
Finally, the Kostka numbers are also generalized by theKostka-Macdonald polynomials, or
The skew generalizations are also available in thejack package: skew Kostka-Jack numbers, skewKostka-Foulkes polynomials, and skew Kostka-Macdonald polynomials.
I.G. Macdonald.Symmetric Functions and HallPolynomials. Oxford Mathematical Monographs. The Clarendon PressOxford University Press, New York, second edition, 1995.
J. Demmel and P. Koev.Accurate and efficient evaluation ofSchur and Jack functions. Mathematics of computations, vol. 75,n. 253, 223-229, 2005.
The symmetric functions catalog.https://www.symmetricfunctions.com/index.htm.