我想知道是否存在任何 R 函数可以计算第二类修正贝塞尔函数的对数的一阶和二阶导数?
例如,我有兴趣找到以下关于 x 的导数:
一阶导数等价于(∂/∂x(K_𝛎(x))) / K_𝛎(x)。我可以同时使用 R 函数“BesselK”和“BesselDK”来计算它。有更好的选择吗?
特别是,如何计算上述R中的二阶导数?我在任何地方都找不到任何具体的东西。
如有任何帮助,我将不胜感激。谢谢!
突破
sympy
(因为R没有本地符号计算工具):
from sympy import *
nu, x = symbols('nu, x')
b = log(besselk(nu, x))
b1 = b.diff(x)
print(b1)
b2 = b1.diff(x)
print(b2)
将结果转换为 R 代码(为方便起见,我定义了一个
besselk
来交换参数的顺序以匹配 Python)
besselk <- function(nu, x) besselK(x, nu)
blogd <- function(x, nu) {
(-besselk(nu - 1, x)/2 - besselk(nu + 1, x)/2)/besselk(nu, x)
}
blogd2 <- function(x, nu) {
(-besselk(nu - 1, x)/2 - besselk(nu + 1, x)/2)*(besselk(nu - 1, x)/2 +
besselk(nu + 1, x)/2)/besselk(nu, x)**2 + (besselk(nu, x)/2 +
besselk(nu - 2, x)/4 + besselk(nu + 2, x)/4)/besselk(nu, x)
}
检查结果:
blogd(1.5, 2.5)
## [1] -2.051282
blogd2(1.5, 2.5)
## [1] 0.9375411
library(numDeriv)
lb <- function(x, nu) log(besselK(x, nu))
grad(lb, x = 1.5, nu = 2.5)
## [1] -2.051282
drop(hessian(lb, x = 1.5, nu = 2.5))
## 0.9375411