Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. library(arrangements)
  2. .P <- function(m, n){
  3. sum(sapply(1L:m, function(i){
  4. sum(sapply(1L:min(m,n,i), function(k){
  5. npartitions(i, k)
  6. }))
  7. }))
  8. }
  9.  
  10. .T <- function(alpha, a, b, kappa, i){
  11. if(length(kappa) == 0L || kappa[1L] == 0L) return(1)
  12. c <- -(i-1)/alpha + kappa[i] - 1
  13. d <- kappa[i]*alpha - i
  14. s <- seq_len(kappa[i]-1L)
  15. e <- d - s*alpha + vapply(s, function(i) sum(kappa >= i), integer(1L))
  16. g <- e + 1
  17. f <- kappa[seq_len(i-1)]*alpha - seq_len(i-1) - d
  18. h <- f + alpha
  19. l <- h*f
  20. prod(a+c)/prod(b+c) * prod((g-alpha)*e/(g*(e+alpha))) * prod((l-f)/(l+h))
  21. }
  22.  
  23. .betaratio <- function(kappa, mu, k, alpha){
  24. t <- k - alpha*mu[k]
  25. s <- seq_len(k)
  26. u <- t + 1 - s + alpha*kappa[s]
  27. s <- seq_len(k-1L)
  28. v <- t - s + alpha*mu[s]
  29. s <- seq_len(mu[k]-1L)
  30. w <- vapply(s, function(i) sum(mu >= i), integer(1L)) - t - alpha*s
  31. alpha * prod(u/(u+alpha-1)) * prod((v+alpha)/v) * prod((w+alpha)/w)
  32. }
  33.  
  34. HypergeoI <- function(m, alpha, a, b, n, x){
  35. summation <- function(i, z, j){
  36. for(kappai in seq_len(if(i==1L) j else min(kappa[i-1L],j))){
  37. kappa[i] <<- kappai
  38. t <- .T(alpha, a, b, kappa, i)
  39. z <- z * x * (n-i+1+alpha*(kappai-1L)) * t
  40. s <<- s + z
  41. if(j > kappai && i < n){
  42. summation(i+1L, z, j-kappai)
  43. }
  44. }
  45. kappa[i] <<- 0L
  46. }
  47. s <- 1
  48. kappa <- integer(0L)
  49. summation(1L, 1, m)
  50. s
  51. }
  52.  
  53.  
  54. Hypergeo <- function(m, alpha, a, b, x){
  55. if(all(x == x[1L])){
  56. return(HypergeoI(m, alpha, a, b, length(x), x[1L]))
  57. }
  58. #
  59. summation <- function(i, z, j){
  60. r <- if(i == 1L) j else min(kappa[i-1L],j)
  61. for(kappai in seq_len(r)){
  62. kappa[i] <<- kappai
  63. Nkappa <<- .Nkappa(kappa) - 1L
  64. z <- z * .T(alpha, a, b, kappa, i)
  65. if(Nkappa > 1L && (length(kappa) == 1L || kappa[2L] == 0L)){
  66. J[Nkappa,1L] <<- x[1L]*(1+alpha*(kappa[1L]-1L)) * J[Nkappa-1L,1L]
  67. }
  68. for(t in 2L:n) jack(0L, 1, 0L, t, kappa, Nkappa)
  69. s <<- s + z * J[Nkappa,n]
  70. if(j > kappai && i < n){
  71. summation(i+1L, z, j-kappai)
  72. }
  73. }
  74. kappa[i] <<- 0L
  75. }
  76. #
  77. jack <- function(k, beta, c, t, mu, Nmu){
  78. for(i in max(k,1L) : sum(mu > 0L)){
  79. if(length(mu)==i || mu[i] > mu[i+1L]){
  80. d <- Nmu
  81. gamma <- beta * .betaratio(kappa, mu, i, alpha)
  82. mu[i] <- mu[i]-1L
  83. Nmu <- .Nkappa(mu) - 1L
  84. if(mu[i] > 0L){
  85. jack(i, gamma, c+1L, t, mu, Nmu)
  86. }else{
  87. if(Nkappa > 1L){
  88. J[Nkappa,t] <<- J[Nkappa,t] + gamma*x[t]^(c+1L) *
  89. ifelse(any(mu>0L), J[Nmu,t-1L], 1)
  90. }
  91. }
  92. mu[i] <- mu[i] + 1L
  93. Nmu <- d
  94. }
  95. }
  96. if(k == 0L){
  97. if(Nkappa>1L) J[Nkappa,t] <<- J[Nkappa,t] + J[Nkappa,t-1L]
  98. }else{
  99. J[Nkappa,t] <<- J[Nkappa,t] + beta * x[t]^c * J[Nmu,t-1L]
  100. }
  101. }
  102. #
  103. n <- length(x)
  104. Pmn <- .P(m,n)
  105. s <- 1
  106. J <- matrix(0, Pmn, n)
  107. J[1L,] <- cumsum(x)
  108. kappa <- integer(0L)
  109. #
  110. D <- rep(NA_integer_, Pmn)
  111. Last <- t(as.integer(c(0,m,m)))
  112. fin <- 0L
  113. for(. in 1L:n){
  114. NewLast <- matrix(NA_integer_, nrow = 0L, ncol = 3L)
  115. for(i in 1L:nrow(Last)){
  116. manque <- Last[i,2L]
  117. l <- min(manque, Last[i,3L])
  118. if(l > 0L){
  119. D[Last[i,1L]+1L] <- fin + 1L
  120. s <- 1L:l
  121. NewLast <- rbind(NewLast, cbind(fin+s, manque-s, s))
  122. fin <- fin + l
  123. }
  124. }
  125. Last <- NewLast
  126. }
  127. .Nkappa <- function(kappa){
  128. kappa <- kappa[kappa>0L]
  129. if(length(kappa)==0L) return(1L)
  130. D[.Nkappa(head(kappa,-1L))] + tail(kappa,1L)
  131. }
  132. summation(1L, 1, m)
  133. s
  134. }
  135.  
  136. alpha <- 2
  137. x <- c(3,2)
  138. Hypergeo(3, alpha, c(4,2), 5, x)
  139. CharFunToolR::HypergeompFqMat(t(c(4,2)), 5, x, MAX=3)
  140.  
  141. x <- c(2,2,2)
  142. Hypergeo(3, alpha, c(4,2), 5, x)
  143. CharFunToolR::HypergeompFqMat(t(c(4,2)), 5, x, MAX=3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement