jackpolynomials-1.0.0.0: src/Math/Algebra/Jack/GPochhammer.hs
module Math.Algebra.Jack.GPochhammer where
import Math.Algebra.Jack (zonal)
gpochhammer :: Fractional a => a -> [Int] -> a -> a
gpochhammer a kappa alpha =
product $
map (\i -> product $
map (\j -> a - (fromIntegral i - 1)/alpha + fromIntegral j -1)
[1 .. kappa !! (i-1)])
[1 .. length kappa]
hcoeff :: Fractional a => [a] -> [a] -> [Int] -> a -> a
hcoeff a b kappa alpha =
numerator / denominator / fromIntegral (factorial (sum kappa))
where
factorial n = product [1 .. n]
numerator = product $ map (\x -> gpochhammer x kappa alpha) a
denominator = product $ map (\x -> gpochhammer x kappa alpha) b
testHypergeo :: Double
testHypergeo =
let a = [2,3] in
let b = [4] in
let coeff kappa = hcoeff a b kappa 2 in
let kappas = [[], [1], [1,1], [2]] in
let x = [5,6] in
sum $ map (\kappa -> coeff kappa * zonal x kappa) kappas
_allPartitions :: Int -> [[Int]]
_allPartitions m = last ps
where
ps = [] : map parts [1..m]
parts n = [n] : [x : p | x <- [1..n], p <- ps !! (n - x), x <= head p]
hypergeoPQ :: (Fractional a, Ord a) => Int -> [a] -> [a] -> [a] -> a
hypergeoPQ m a b x =
sum $ map (\kappa -> coeff kappa * zonal x kappa) kappas
where
kappas = filter (\kap -> length kap <= length x) (_allPartitions m)
coeff kappa = hcoeff a b kappa 2