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

R中的显式公式与符号导数,r,derivative,R,Derivative,我想计算R中某些函数f的高阶导数。 我有两种可能 要么我确定f(k)的一般表达式,f的第k阶导数(我可以在我的特殊情况下这样做),然后我计算它 或者我利用R的能力来执行符号导数(函数D() 1比2的优势是什么?假设f(k)不是一个递归公式。如果f(k)是递归的呢 任何提示都行。符号微分比手工操作更不容易出错 对于低阶,我认为符号差异化不会花费太多的计算机时间,但您可以随时确定您的具体情况,以确定它正在使用什么,或包。另见 您可能希望尝试使用符号和手部区分作为检查 关于R(和相关函数,如D)与软件

我想计算R中某些函数f的高阶导数。 我有两种可能

  • 要么我确定f(k)的一般表达式,f的第k阶导数(我可以在我的特殊情况下这样做),然后我计算它
  • 或者我利用R的能力来执行符号导数(函数D()
  • 1比2的优势是什么?假设f(k)不是一个递归公式。如果f(k)是递归的呢


    任何提示都行。

    符号微分比手工操作更不容易出错

    对于低阶,我认为符号差异化不会花费太多的计算机时间,但您可以随时确定您的具体情况,以确定它正在使用什么,或包。另见

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

    关于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还能识别更多的函数吗?好的,我已经删除了我的注释并将它们转移到了答案中。