R中的显式公式与符号导数

Mar*_*rco 3 r derivative

我想评估一些功能的更高阶导数˚Fř.我有两种可能性.

  1. 任一予确定的一般表达式˚F (K) ,所述ķ的第衍生物˚F(我在我的特定情况下这样做),然后我评价它;
  2. 或者我利用R的能力来执行符号导数(函数D()).

1比2的优点是什么?让我们说f (k)不是递归公式.如果f (k)是递归的怎么办?

任何提示将不胜感激.

G. *_*eck 12

符号差异比手工操作更容易出错.

对于低阶命令,我不认为符号差异会花费很多计算机时间,但您可以随时计算您的特定情况,以确定它使用proc.time,system.timerbenchmark包.另请参阅这些示例.

您可能希望尝试将符号和手部区分作为检查.

关于R的派生(以及相关的函数,如D)与Ryacas包,后者具有重复区分的功能,而不需要用户自己迭代(第三个deriv指定顺序)并且它具有Simplify不存在对应物的功能在R,虽然Ryacas应该仔细检查,因为yacas有时可能有点儿马车.

这是一个例子:

> library(Ryacas)
> x <- Sym("x")
> y <- (x^2+x)^2
> dy <- deriv(y, x, 2) # 2nd deriv
> dy
expression(2 * (2 * x + 1)^2 + 4 * (x^2 + x))
> Simplify(dy)
expression(2 * (6 * x^2 + 6 * x + 1))
Run Code Online (Sandbox Code Playgroud)

编辑:添加到示例:

> Eval(dy, list(x = 3))
[1] 146
> Eval(Simplify(dy), list(x = 3))
[1] 146
>
> f <- function(x) {}
> body(f) <- yacas(Simplify(dy))[[1]]
> f
function (x) 
2 * (6 * x^2 + 6 * x + 1)
> f(3)
[1] 146
>
> # double check
> w <- 3
> eval(D( D(expression((w^2+w)^2), "w"), "w"))
[1] 146
Run Code Online (Sandbox Code Playgroud)

也试试demo("Ryacas-Function").

编辑2:修复了错误并为示例添加了更多内容.