f 的导数,使得 f<-function(x){x^2}(或类似的)没有 yacas

Derivative of f, such that f<-function(x){x^2} (or similar) without yacas

我需要找到定义为

的函数的导数
f<-function(x){x^2}

之后我想要一个导数函数g,这样我就可以得到类似的东西:

  g(5)       # entered 
  10          # answer 

没有 Yacas 或类似的重型软件。 R能求出x^2的导数,却没有办法求导f<-function(x){x^2},我觉得很奇怪。

我试过这样做:

f<-function(x){x^2}
g<-Deriv(f,"x")

我得到一个错误:

 Error in list2env(list(), NULL, <environment>) : 
 names(x) must be a character vector of the same length as x

我也试过这个:

> f1<-'x^2'
> g<-Deriv(f1,"x")
> g
#Result:
"2*x"

我可以将我的函数 f 转换为类似 f1 的函数并反转该过程吗? 还有别的办法吗?

假设一个单行体和一个单一变量的函数x:

f <- function(x) x^2
g <- f
body(g) <- D(body(f), "x")

给予:

> g
function (x) 
2 * x

您可以将函数定义为表达式:

f <- expression(x^2)

可以使用 eval():

将此类表达式视为函数
#> eval(f,list(x=2))
#[1] 4

在这种情况下,表达式而不是函数的优点是前者允许使用符号演算来获得一阶导数:

g <- D(f,"x")
#> g
#2 * x

要计算一阶导数的这个表达式(更准确地说,它的 class 是一个 call),您可以使用与之前对 f 所做的相同的语法:

#> eval(g,list(x=5))
#[1] 10