2017-03-11 2 views
0

ここに私の問題があります: numpyを使用して(数値)導関数を計算しようとしていますが、numpy.diff関数が返す値とnumpy.gradientの値に問題があります)。私が見つけたのは、値が完全に間違っているということです!このスクリプトの出力はnumpy.diffの出力が間違っています

import numpy as np 
x = np.linspace(-5, 5, 1000) 
y = x**2 
yDiff = np.diff(y) 
print y[0], yDiff[0] 

25.0 -0.0999998997997 

最初の値が右であり、第二は、それが(近似を考慮しなければならないものよりも正確に100倍小さい は、ここでのサンプルコードです)! 私は別の試みをしましたが、これは関数の境界に関連する問題ではなく、この100の要素は体系的に見えます... これはnp.diffが行っているいくつかの正規化に関連していますか?あるいは、気づかずに何か重要なものを見逃しているのでしょうか? 助けをありがとう

+0

それとも、あなたはnp.linspace' 'をもう一度見て必要があります。ところで

np.diff(y)/(x[1] - x[0]) 

を試してみて、np.linspaceはこのコンテキストで便利ですretstepキーワードを持っていますか? – Divakar

+0

あなたはもっと明白かもしれませんか? – mmonti

+0

申し訳ありませんが、私の悪い、目的の出力として派生部分が表示されませんでした。 – Divakar

答えて

4

np.diff有限差分を計算するだけです。あなた自身の間隔を考慮する必要があります。 。

x, dx = np.linspace(-5, 5, 100, retstep=True) 
... 
np.diff(y)/dx 
+0

ああ、そうだね。私はちょうど有限の違いは数学的な導関数を意味すると仮定しました。そして私は明らかに例を十分に読んでいなかったようですが、今はすべてが理にかなっています。 – mmonti

+0

@ mmonti 'np.diff'が微分を計算するのはかなり難しいでしょう。誰もxスペーシングを教えていないからです。 –

+0

実際、それは最初は私を困惑させていましたが、 。 – mmonti

関連する問題