私はPythonで関数を持っています:
def f(x):
return x[0]**3 + x[1]**2 + 7
# Actually more than this.
# No analytical expression
これは、ベクトルのスカラー値関数です。
この関数のヤコビアンとヘッシアンを numpy または scipy で数値的に近似するにはどうすればよいですか?
(このスペースには多くの更新があったため、2017 年後半に更新されました。)
あなたの最善の策は、おそらく自動微分です。これは深層学習の標準的なアプローチであるため、現在、これには多くのパッケージがあります。
別のオプションは、基本的には評価するだけの有限差分(f(x + eps) - f(x - eps)) / (2 * eps)
で近似することです(ただし、明らかにそれよりも多くの労力が費やされます)。これは、特に適度に高い次元では、おそらく他のアプローチよりも遅く、精度が低くなりますが、完全に一般的であり、コードの変更は必要ありません。numdifftools
このための標準のPythonパッケージのようです。
を使用して完全にシンボリックな導関数を見つけようとすることもできますSymPy
が、これは比較的手動のプロセスになります。