2013-04-18 104 views
16

numpy.gradientの機能は何であり、どのようにそれを多変数関数の勾配の計算に使用するのかは分かりません。NumPyによる勾配の計算

例えば、私はそのような機能を持っている:私はそれが3次元のグラデーションの計算する必要が

def func(q, chi, delta): 
    return q * chi * delta 

は(他の言葉で、私はすべての変数(Q、カイに関して偏微分を計算したいです、デルタ))。

NumPyを使用してこの勾配を計算するにはどうすればよいですか?

答えて

16

sudo apt-get install python-sympy 

または任意のLinuxディストリビューションの下でUbuntuの下Sympyをインストールすることができますにオプション:

NUMPY付き

基本的には、3次元のグリッドを定義し、このグリッド上の関数を評価することです。その後、関数値のこのテーブルをnumpy.gradientに送り、すべての次元(変数)の数値微分で配列を取得します。

hereから例:

from numpy import * 

x,y,z = mgrid[-100:101:25., -100:101:25., -100:101:25.] 

V = 2*x**2 + 3*y**2 - 4*z # just a random function for the potential 

Ex,Ey,Ez = gradient(V) 

numpyの

なくてもcentered difference quotientを使用することによって派生を自分で計算することができます。 centered difference quotient

これは、基本的には、定義済みのグリッドのすべてのポイントについて、何かnumpy.gradientis doingです。

+0

おかげで、ステファンを使用することができます!実際には、デリバティブマニュアル(フレームワークなし)をどのように計算するのかを理解していますが、np.gradientがどのように動作するのか理解できませんでした。以前は、この目的のためにC++とgslの組み合わせを使用しましたが、このアプローチではあまりにも多くのコーディングが必要です。 –

+2

正確には、式はnumpy.diffと同じです。 'numpy.gradient'は似ていますが、境界では特別な動作をします。 – Mark

+0

@マーク: 'numpy.gradient'は' numpy.diff'よりもこの式($ + \ Delta x $と$ - \ Delta x $の中心の差の商)の方がはるかに似ています – user66081

10

NumpyとScipyは数値計算用です。分析関数の勾配を計算したいので、記号的な数学をサポートするSympyパッケージを使用する必要があります。差別化はhereで説明されています(実際には左下隅のWebコンソールで使用できます)。

あなたは問題がnumpyのは、直接あなたの誘導体を得ることができない、あなたは2を持っていること、であるpip

sudo pip install sympy 
関連する問題