我聽說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