ここでは、数学関数を簡単に導出できる関数を作成しようとしている初心者プログラマーです。
関数は次のように実行する必要があります。
f(x) = x ** 2 + 2 * x <--- ユーザー入力
f'(x) = 2 * x + 2
Wolfram と Maple があることは知っていますが、独自の実際の派生プログラムを作成したいと考えています。これが可能かどうか知りたいです。
ここでは、数学関数を簡単に導出できる関数を作成しようとしている初心者プログラマーです。
関数は次のように実行する必要があります。
f(x) = x ** 2 + 2 * x <--- ユーザー入力
f'(x) = 2 * x + 2
Wolfram と Maple があることは知っていますが、独自の実際の派生プログラムを作成したいと考えています。これが可能かどうか知りたいです。
シンボリック微分を行うプログラムがたくさんあるので、それは明らかに可能です。そうは言っても、それは自明ではありません。上記の単純な例では、次のようなパーサーを作成する必要があります。
それは、この非常に基本的なタイプの派生物のみを処理します-チェーンルール、積ルールなどはなく、それらをそれぞれ個別に実装する必要があります.
はい、間違いなく実行可能ですが、自明ではありません。
これを記号微分と呼びます。
方程式を解析して式と演算のツリーにし、通常の微分規則 (微積分 I から) をツリーに適用する必要があります。
もちろん、独自の微分プログラムを作成するために数日を費やすことができます (幸いなことに、微分は非常に簡単です)。しかし、これが演習ではない場合は、実際に何か準備ができているものを使用できます。たとえば、sympyを使用できます。
import sympy
x = sympy.Symbol('x')
sympy.diff(x**2+2*x, x)
# return: 2*x + 2
SICPには、基本的な記号微分の良い例があります。これはスキームであり、Python ではありませんが、入力の解析に取り組めば、簡単に変換できるはずです。
それは絶対に可能です。まず、ユーザーの入力文字列を解析して、操作できる関数の表現を取得する必要があります。次に、サポートする微分規則に従って、関数内のさまざまな項を処理する必要があります。