我听说 McCarthy 发明 Lisp 的一个最初的动力之一就是为了编写自动微分系统。尽管如此,我的谷歌搜索没有找到任何用于此目的的库/宏。是否存在任何Scheme/Common Lisp/Clojure库(宏)可接受函数 F 并返回计算 F 的导数 dF/dx 的函数?
我希望它支持具有多个参数的 F。用户将选择要针对其进行微分的 x。理想情况下,不同iator 将甚至适用于矢量值 F 和 x。
编辑: 有几个人提到了符号微分,符号微分和自动微分之间的差异是微妙的,但在Wikipedia中很好地概述了这一区别,特别在this picture中。在lisp中,这种区别不太明显,因为符号表达式可以直接转换为工作程序,但仍存在潜在的困难:
符号微分要求被微分的表达式由已知导数的操作组成。例如,有人提到了SICP中的一个宏的例子,该宏可以处理简单的sexps,如(+ y (* (x y)))
,并使用链式法则以及如何区分+
和*
的知识来返回表示导数的sexp。我需要它能够处理像(* (foo x y) (bar x))
这样的表达式,其中foo
和bar
可能会调用其他函数,这些函数的导数在区分时间不知道。如果有一种方法可以获取像
(foo x y)
这样的表达式,并以卫生方式用x
和y
替换任何参数的提及,并替换为其函数体,则这将是可以的。有吗?此外,上述内容都没有涉及到当针对向量值参数微分向量值函数时出现的复杂情况...这正是大多数自动微分实现所针对的。