我听说McCarthy发明Lisp的最初动机之一是编写一个自动分化系统。尽管如此,我的谷歌搜索还没有放弃任何图书馆/宏这样做。是否有任何Scheme/Common Lisp/Clojure库(宏)用于获取函数F并返回计算F的导数的函数dF/dx?Scheme/Common Lisp/Clojure中的自动差异库
我希望它支持F的多个参数。用户将选择哪些是x来区分相对于。理想情况下,即使对于矢量值F和x,差异函数也可以工作。
编辑:有几个人提到了符号分化。象征性分化与自动分化之间的区别是微妙的,但在Wikipedia,特别是this picture中有很好的概括。在lisp中,这种区别并没有那么强烈,其中符号表达式可以按原样转换为工作程序,但是仍然存在潜在的困难:
符号区分要求将表达式区分为由具有已知派生类型的操作组成。例如,有人提到SICP的一个宏的例子,它通过简单的鸳鸯(如(+ y (* (x y)))
)搅动,并使用连锁规则,以及如何区分+
和*
的知识,返回代表衍生物的sexp。我需要这样的表达式来处理像(* (foo x y) (bar x))
这样的表达式,其中foo
和bar
可以依次调用其衍生物在微分时间不知道的其他函数。
如果有拿一个表达式像(foo x y)
和其函数体替换它,在卫生型的方式替代参数中的任何提及与x
和y
某种程度上,这将是罚款。在那儿?
此外,上述任何一个都不能解决当向量值函数与矢量值参数相区分时出现的复杂情况......这是大多数自动分化实现的目标。
的“数值的方法”标签不能满足您的问题,因为你要求的是_symbolical_ differentiate。通过数值微分在x处寻找函数f的微分可以简单地计算(f(x + dx)-f(x))/ dx对于一些小的dx值。 – Curd 2011-02-03 23:29:27
@curd:通过添加数字方法标记,我并不是想暗示我正在寻找一种执行数值微分的方法,显然,我不是。我的意思是这个问题涉及到与数值计算相关的功能(例如评估实现数值方法的符号表达式)。 – SuperElectric 2011-02-04 01:47:33
我和你在一起。每次我提到自动分化时,人们都将它与象征性的区分混淆起来,并且经常拒绝听到有区别,这令人沮丧。它肯定是一种“数值方法”,它当然不是“数值分化”。 – sigfpe 2011-04-28 23:18:49