R中的显式公式与符号导数
我想计算R中某些函数f的高阶导数。 我有两种可能R中的显式公式与符号导数,r,derivative,R,Derivative,我想计算R中某些函数f的高阶导数。 我有两种可能 要么我确定f(k)的一般表达式,f的第k阶导数(我可以在我的特殊情况下这样做),然后我计算它 或者我利用R的能力来执行符号导数(函数D() 1比2的优势是什么?假设f(k)不是一个递归公式。如果f(k)是递归的呢 任何提示都行。符号微分比手工操作更不容易出错 对于低阶,我认为符号差异化不会花费太多的计算机时间,但您可以随时确定您的具体情况,以确定它正在使用什么,或包。另见 您可能希望尝试使用符号和手部区分作为检查 关于R(和相关函数,如D)与软件
任何提示都行。符号微分比手工操作更不容易出错 对于低阶,我认为符号差异化不会花费太多的计算机时间,但您可以随时确定您的具体情况,以确定它正在使用什么,或包。另见 您可能希望尝试使用符号和手部区分作为检查 关于R(和相关函数,如
D
)与软件包的比较,后者具有重复区分功能,而无需用户自己迭代(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))
>库(Ryacas)
>xy-dy-dy
表达式(2*(2*x+1)^2+4*(x^2+x))
>简化(dy)
表达式(2*(6*x^2+6*x+1))
编辑:添加到示例:
> 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
>Eval(dy,list(x=3))
[1] 146
>评估(简化(dy),列表(x=3))
[1] 146
>
>f主体(f)f
功能(x)
2*(6*x^2+6*x+1)
>f(3)
[1] 146
>
>#仔细检查
>w eval(D(表达式((w^2+w)^2),“w”),“w”))
[1] 146
还可以尝试演示(“Ryacas函数”)
编辑2:修复了一个错误并在示例中添加了更多内容。您想做什么?你的问题不清楚。是的,Ryacas和其他代数计算机语言可以计算分析(不是“符号”导数(不是“导数”),是的,你可以让R计算表示导数的各种函数的值。但是为什么,以及对于哪一组函数
f
?我确实在R中提到了“符号”导数(请尝试帮助(D))“为什么”太长和不相关,无法解释。“用于什么函数集f”…好吧,让我们假设任何可以计算导数的函数…我想知道你会指出哪些优点,例如,在计算时间、内存、速度方面,@g.格罗森迪克:非常感谢你的建议comments@G.Grothendieck谢谢你的插话。你能考虑一下你的意见吗?如果Ryacas比D()w.r.t.符号微分法还有其他优势吗?D()
的帮助页面列出了许多它可以识别的单变量函数。Ryacas还能识别更多的函数吗?好的,我已经删除了我的注释并将它们转移到了答案中。