McCarthyがLispを発明した最初の動機の1つは、自動判別のためのシステムを書くことでした。それにもかかわらず、私のGoogleの検索は、これを行うためのライブラリ/マクロを生成していません。関数Fを取り、Fの微分を計算する関数dF/dxを返すためのScheme/Common Lisp/Clojureライブラリ(マクロ)がありますか?Scheme/Common Lisp/Clojureの自動微分ライブラリ
複数の引数を持つFをサポートしたいと考えています。ユーザは、これらのうちのどれがxに関して差別化されるかを選択する。理想的には、微分器はベクトル値のFとxについても機能します。
EDIT:いくつかの人々が象徴的な分化について言及しています。象徴的な分化と自動分化との違いは微妙な違いですが、Wikipedia、特にthis pictureによくまとめられています。この区別は、象徴的な表現がそのまま現実のプログラムに変わる可能性のあるlispほど強力ではないが、潜在的な難しさが残っている。記号的な区別のために、既知の派生語を持つ演算で構成されている表現が必要である。例えば、(+ y (* (x y)))
のような単純な性別をぶつけ、+
と*
を区別する方法の知識とともに、チェーンルールを使用して、その派生語を表すsexpを返すSICPのマクロの例を挙げた人がいます。 (* (foo x y) (bar x))
のような式で作業する必要があります。foo
とbar
は、微分時に微分が分からない他の関数を呼び出すことがあります。 (foo x y)
のような表現を取り、hygenic方法でx
とy
で引数のいずれかの言及に置き換えて、その関数本体とそれを交換する方法があるかどう
これは大丈夫でしょう。ある?
また、ベクトル値の関数をベクトル値の引数と区別する際に生じる複雑さについても言及していません。これは、ほとんどの自動二分化の実装に適しています。
を持つビット「の数値・メソッド」タグは、あなたの質問には適切ではない、それをClojurifying後
ですなぜなら、あなたが求めているのは_記号的な分化であるからです。数値微分によるxにおける関数fの導出を見つけることは、dxのある小さな値に対する(f(x + dx)-f(x))/ dxの計算に過ぎない。 – Curd
@curd:数値メソッドのタグを追加することで、数値の微分を行う方法を探していることを意味するわけではありません。私はちょうどその問題が、数値計算に関連する関数(例えば、数値的方法を実装する記号表現の評価)に関係することを意味しました。 – SuperElectric
私はあなたと一緒にいます。私は、自動分化の人々がそれを象徴的な差別化と混同し、違いがあると聞くことをしばしば拒否することを言い渡すたびに、イライラしています。これは確かに「数値的方法」であり、確かに「数値的な差別化」ではありません。 – sigfpe