如何使用 "Deriv" 根据多个参数计算函数的偏导数

How can I compute partial derivatives of a function depending on multiple parameters using "Deriv"

我正在尝试使用包 Deriv,根据一个或两个变量和参数向量计算函数的符号导数。但是,我总是得到错误:

Error in FUN(X[[i]], ...) : Could not retrieve body of '[()'

我试过:

test_fun <- function(x,y,par){x\*par[1]+y\*par[2]}  
Deriv(test_fun,"x",par=c(2,2))  

这会产生上述错误。也是

par <- c(2,2)  
test_fun <- function(x,y,par){x\*par[1]+y\*par[2]}  
Deriv(test_fun,"x")  

显然

test_fun <- function(x,y,par){x\*2+y\*2}  
Deriv(test_fun,"x")  

按预期工作,但不是我想要的。

阅读 Deriv 包的文档,似乎不支持直接向函数传递额外的参数。还有其他方法可以达到预期的效果吗?

更新答案 (9/16):

下面有两个选项可以通过 Deriv 传递参数。另请注意,Derive 将在原始函数中保留大括号,因此要么在没有大括号的情况下定义函数,要么在之后调用 eval()

选项 1. 在对 Deriv

的调用中定义
test_fun <- function(x,y,par){x*par[1]+y*par[2]}
eval(Deriv(test_fun(par=c(2,2)),'x'))
# [1] 2

选项 2. 将参数值定义为函数。

test_fun <- function(x,y,par){x*par[1]+y*par[2]}
tpar <- function() c(2,2)
eval(Deriv(test_fun(par=tpar()), "x"))
# [1] 2