【问题标题】:In R, incomplete gamma function with complex input?在R中,具有复杂输入的不完整伽马函数?
【发布时间】:2017-12-06 00:31:35
【问题描述】:

可以在 R 中使用 pgamma 或使用 library(gsl) 中的 gamma_inc_Q 或使用 library(expint) 中的 gammainc 在 R 中计算不完整的 gamma 函数。然而,所有这些函数都只接受真实的输入。

我需要一个不完全伽马函数的实现,它需要复杂的输入。具体来说,我有一个整数作为第一个参数,一个复数作为第二个参数(积分中的极限)。

这个函数是为复杂的输入定义好的(见Wikipedia),我一直在 Mathematica 中计算它。它似乎没有内置到 R 中,而且我在任何库中都没有看到它。

那么,除了查找算法、在 C 中实现它并编写 R 接口之外,任何人都可以提出更短的方法来进行这些计算吗?

(如果我必须自己实现它,这里是我发现的用于复杂输入的唯一算法:Kostlan & Gokhman 1987

【问题讨论】:

  • R 特殊函数的实现不如 Mathematica 案例那么广泛,我想如果你没有在 gsl 中找到你想要的东西,那么你能做的最好的事情就是你已经拥有的建议自己。不要害羞与 Rcpp 交互;)
  • 我以前没听说过 Rcpp,看起来真的很酷。我在 R 中对外部函数接口有过很多痛苦的经历,欢迎任何简化它的东西。
  • 如果您使用的是 RStudio,并且在基于 unix 的操作系统中,那一点也不难。看看这个example,可能会有帮助;)

标签: r gamma-function


【解决方案1】:

这是一个实现,假设您想要 lower 不完全 gamma 函数。我已经将几个值与 Wolfram 进行了比较,它们匹配。

library(CharFun)

incgamma <- function(s,z){
  z^s * exp(-z) * hypergeom1F1(z, 1, s+1) / s
}

对于大的s,可能评估失败。


编辑

看起来CharFun 已从 CRAN 中删除。你可以在HypergeoMat中使用IncGamma

> library(HypergeoMat)
> IncGamma(m=50, 2+2i, 5-6i)
[1] 0.3841221+0.3348439i

Wolfram 上的结果相同。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多