我听说 McCarthy 发明 Lisp 的最初动机之一是编写一个用于自动区分的系统。尽管如此,我的谷歌搜索并没有产生任何库/宏来执行此操作。是否有任何 Scheme/Common Lisp/Clojure 库(宏)用于获取函数 F 并返回计算 F 导数的函数 dF/dx?
我希望它支持具有多个参数的 F。用户将选择其中哪个是要区分的 x。理想情况下,微分器甚至适用于向量值 F 和 x。
编辑:有几个人提到了符号分化。符号微分和自动微分之间的区别是一个微妙的区别,但它在维基百科中得到了很好的总结,尤其是在这张图片中。这种区别在 lisp 中没有那么明显,其中符号表达式可以按原样转换为工作程序,但仍然存在潜在的困难:
符号微分要求被微分的表达式由已知导数的运算组成。例如,有人提到了 SICP 的宏示例,该示例通过简单的性别来搅动(+ y (* (x y)))
,并使用链式法则,以及如何区分+
和的知识*
,返回代表导数的性别。我需要它来处理诸如(* (foo x y) (bar x))
, where之类的表达式,foo
并且bar
可能反过来调用其他函数,这些函数的导数在微分时是未知的。
如果有一种方法可以将表达式 like(foo x y)
替换为它的函数体,用x
和y
以一种卫生的方式替换任何对参数的提及,这将是很好的。有没有?
此外,以上都没有解决向量值函数相对于向量值参数微分时出现的复杂性......这是大多数自微分实现所针对的。