1. ホーム
  2. python

[解決済み] Numpyを使って微分を計算するには?

2022-03-03 23:09:32

質問

関数の微分を計算するには、例えば次のようにします。

y = x 2 +1

使って numpy ?

例えば、x=5での微分の値が欲しいとすると...。

どのように解決するのですか?

4つのオプションがあります。

  1. 有限差分
  2. 自動デリバティブ
  3. シンボリック微分
  4. 微分を手で計算する。

有限差分は外部ツールを必要としませんが、数値誤差が生じやすく、多変数の場合、時間がかかることがあります。

問題が単純であれば、記号微分法は理想的です。最近は記号的手法もかなり強固になってきています。 SymPy は、NumPyとうまく統合された、このための優れたプロジェクトです。autowrapやlambdify関数を見てください。 Jensenが同じような疑問について書いたブログ記事 .

自動導関数はとてもクールで、数値誤差が生じにくいですが、いくつかの追加ライブラリが必要です(ググってみてください、良い選択肢がいくつかあります)。これは最も堅牢ですが、最も洗練され、セットアップが困難な選択肢です。 もし、自分自身を numpy 構文の場合 テアノ がいいかもしれません。

SymPyを使用した例です。

In [1]: from sympy import *
In [2]: import numpy as np
In [3]: x = Symbol('x')
In [4]: y = x**2 + 1
In [5]: yprime = y.diff(x)
In [6]: yprime
Out[6]: 2⋅x

In [7]: f = lambdify(x, yprime, 'numpy')
In [8]: f(np.ones(5))
Out[8]: [ 2.  2.  2.  2.  2.]