The ‘jack’ package: Jack polynomials
library(jack)
library(microbenchmark)As of version 2.0.0, the Jack polynomials can be calculated with Julia. The speed is amazing:
julia <- Jack_julia()
## Starting Julia ...
x <- c(1/2, 2/3, 1, 2/3, -1, -2, 1)
lambda <- c(5, 3, 2, 2, 1)
alpha <- 3
microbenchmark(
R = Jack(x, lambda, alpha),
Julia = julia$Jack(x, lambda, alpha),
times = 5
)
## Unit: milliseconds
## expr min lq mean median uq max
## R 15767.690900 16131.731601 16546.8662 16381.9088 17123.5399 17329.460
## Julia 8.395101 9.733001 458.8062 11.0415 90.6334 2174.228
## neval
## 5
## 5Jack_julia() returns a list of functions. ZonalPol, ZonalQPol and
SchurPol always return an exact expression of the polynomial,
i.e. with rational coefficients (integers for SchurPol). If you want
an exact expression with JackPol, you have to give a rational number
for the argument alpha, as a character string:
JP <- julia$JackPol(m = 2, lambda = c(3,1), alpha = "2/5")
JP
## mvp object algebraically equal to
## 3.92 x1 x2^3 + 5.6 x1^2 x2^2 + 3.92 x1^3 x2
##
## Exact expression:
## 98/25 * x1 * x2^3 + 28/5 * x1^2 * x2^2 + 98/25 * x1^3 * x2To evaluate a polynomial, use as.function:
jp <- as.function(JP)You can provide the values of the variables of this function as numbers or character strings:
jp(2, "3/2")
## [1] "1239/10"The evaluation is performed by the Ryacas package. If you want to
substitute a variable with a complex number, use a character string
which represents this number, with I denoting the imaginary unit:
jp("2 + 2*I", "2/3")
## [1] "Complex((-26656)/675,43232/675)"Two functions are provided to print the polynomials with an exact expression:
prettyForm(JP)
##
## 3 2 2 3
## x2 * 98 * x1 x2 * 28 * x1 x2 * 98 * x1
## ------------- + -------------- + -------------
## 25 5 25toLaTeX(JP)
## $\frac{x_{2}^{3} 98 x_{1}}{25} + \frac{x_{2}^{2} 28 x_{1}^{2}}{5} + \frac{x_{2} 98 x_{1}^{3}}{25} $