提问人:Will 提问时间:7/25/2023 最后编辑:ThomasIsCodingWill 更新时间:7/25/2023 访问量:62
在 R 中实现 Legendre 函数
Implementing the Legendre Function in R
问:
我想用 R 编写一个函数,该函数根据次数 $\nu$ 和阶数 $m$ 的勒让德函数定义,其中这些函数可能是分数。我想实现的函数位于此积分表中结果 3.664.4 的右侧。
有人可以帮我在 R 中重现这个比 Pracma 包中提供的函数更通用的 Legendre 函数吗?为了仔细检查它是否有效,也许重现此处给出的参数 $1/\psi$ 和 $0$ 的概率密度会很有用。这是为数不多的使用这种更通用形式的 Legendre 函数的 R 函数示例之一。
答:
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
更新:修复了问题
下一个:确定线的系数 [关闭]
评论
?gsl::Legendre
可能也会有所帮助,您必须查看此处并与 Abramowitz 和 Stegun 进行交叉引用......