R用户定义函数中的导数和表达式

时间:2017-05-27 17:08:58

标签: r function expression derivative

我是编码和R的新手,我试图自学,但我有点挣扎。

我试图创建一个简单的微积分函数,使del运算符∇= 作用于标量。我可以手动计算衍生物:

> c(D(expression(x*y*z),'x'),D(expression(x*y*z),'y'), 
D(expression(x*y*z),'z'))
[[1]]
y * z

[[2]]
x * z

[[3]]
x * y

这是我到目前为止,它显然需要更多的输入。任何人都可以帮助我,非常感谢:)

> grad <- function(scal) {
+    c(D(expression(scal),'x'),D(expression(scal),'y'),
     D(expression(scal),'z'))
+ }

> grad(x*y*z)
[1] 0 0 0

2 个答案:

答案 0 :(得分:1)

让我们试试这个:

grad <- function(scal){
    scal <- substitute(scal)
    sapply(c('x', 'y', 'z'), function(v) D(scal, v))
}

# > grad(x*y*z)
# $x
# y * z
# 
# $y
# x * z
# 
# $z
# x * y

注意:如果我们将sapply替换为lapply,则输出将是您问题中的输出。但我认为names结果会提供更多信息。

答案 1 :(得分:0)

你应该传递给grad一个表达式:

grad <- function(scal) {
   c(D(scal,'x'), D(scal,'y'), D(scal,'z'))
}
grad(expression(x*y*z))

grad给出的输出是list,包含3个元素:

[[1]]
y * z

[[2]]
x * z

[[3]]
x * y