第二类修正贝塞尔函数的对数导数有R函数吗?

问题描述 投票:0回答:1

我想知道是否存在任何 R 函数可以计算第二类修正贝塞尔函数的对数的一阶和二阶导数?

例如,我有兴趣找到以下关于 x 的导数:

  • ∂/∂x log(K_𝛎(x))
  • ∂^2/∂x^2 log(K_𝛎(x))

一阶导数等价于(∂/∂x(K_𝛎(x))) / K_𝛎(x)。我可以同时使用 R 函数“BesselK”和“BesselDK”来计算它。有更好的选择吗?

特别是,如何计算上述R中的二阶导数?我在任何地方都找不到任何具体的东西。

如有任何帮助,我将不胜感激。谢谢!

r function derivative bessel-functions
1个回答
0
投票

突破

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
© www.soinside.com 2019 - 2024. All rights reserved.