在 R 中实现 Legendre 函数

Implementing the Legendre Function in R

提问人:Will 提问时间:7/25/2023 最后编辑:ThomasIsCodingWill 更新时间:7/25/2023 访问量:62

问:

我想用 R 编写一个函数,该函数根据次数 $\nu$ 和阶数 $m$ 的勒让德函数定义,其中这些函数可能是分数。我想实现的函数位于此积分表中结果 3.664.4 的右侧。

enter image description here

有人可以帮我在 R 中重现这个比 Pracma 包中提供的函数更通用的 Legendre 函数吗?为了仔细检查它是否有效,也许重现此处给出的参数 $1/\psi$ 和 $0$ 的概率密度会很有用。这是为数不多的使用这种更通用形式的 Legendre 函数的 R 函数示例之一。

R 函数 数学

评论

2赞 Ben Bolker 7/25/2023
到目前为止,您尝试过什么?你在哪里被卡住了?您的第二个参数应该是 $\mu$ 而不是 $\nu$ 吗?
0赞 Ben Bolker 7/25/2023
cooltools 包声称具有相关的勒让德多项式 P,尽管我不知道是否允许分数索引。这个问题似乎很困难......
1赞 Ben Bolker 7/25/2023
?gsl::Legendre可能也会有所帮助,您必须查看此处并与 Abramowitz 和 Stegun 进行交叉引用......
0赞 Will 7/26/2023
@BenBolker是的,这似乎并不理想
0赞 Ben Bolker 7/26/2023
我没有投反对票,但我认为这个问题要求很高。除非有人碰巧有一个解决方案,或者做了一些非常相似的事情,否则要回答这个问题,我们必须深入研究参考资料,弄清楚所有符号指的是什么,看看这些特殊功能是否在某个地方实现,或者它们是否可以合理地轻松/稳定地实现,......再说一遍,你试过什么

答:

1赞 ThomasIsCoding 7/25/2023 #1

从数值计算的角度来看,也许你可以根据积分表达式来定义函数,例如,

f <- function(z, mu, nu) {
    integrand <- function(x) {
        (z + sqrt(z^2 - 1) * cos(x))^mu * sin(x)^(2 * nu - 1)
    }
    if (!is.complex(z) && abs(z) < 1) {
        z <- as.complex(z)
    }
    re <- integrate(\(x) Re(integrand(x)), 0, pi)$value
    im <- integrate(\(x) Im(integrand(x)), 0, pi)$value
    ifelse(im == 0, re, re + 1i * im)
}

我对勒让德函数或多项式没有太多经验,但您可以尝试验证它是否正常工作。

评论

0赞 Will 7/26/2023
这是一个很好的解决方案,尽管我试图在将它应用于具有 x,k,p 和 m 的合适值的密度时对其进行测试 [ jpd <-function(x,k,p,m) {(cosh(k p)+sinh(k p)*cos(x-m))^(1/p)/(2*pif(cosh(kp),1/p,0))} ] 并且它似乎引发了错误“积分错误(函数(x) Re(integrand(x)), 0, pi) : 在外推表中检测到舍入误差”。我对 R 不太熟悉,并且我仍处于学习曲线上,因此在识别和解决这些问题方面的任何帮助将不胜感激。感谢您到目前为止对此问题的贡献。你一直很有帮助。
1赞 Will 7/26/2023
更新:修复了问题