44

Numpy/Scipy で有限差分関数を含むモジュールを探しています。ただし、私が見つけた最も近いものは ですnumpy.gradient()。これは、2 次精度の 1 次有限差分には適していますが、高次導関数やより正確な方法が必要な場合はそれほどではありません。この種の特定のモジュールはあまり見つけられませんでした。ほとんどの人は、必要に応じて「独自のロール」を行っているようです。したがって、私の質問は、高次 (精度と導関数の両方) の有限差分法に特化したモジュール (Numpy/Scipy の一部またはサードパーティ モジュールのいずれか) を誰かが知っているかどうかです。取り組んでいる独自のコードがありますが、現在は少し遅いので、最適化を試みるつもりはありません。

微分ではなく、有限差分について話していることに注意してください。scipy.misc.derivative()Numdifftoolsの両方を見てきました。これは、私が持っていない分析関数の導関数を取ります。

4

5 に答える 5

10

askewchanさんの回答通りです。これは素晴らしいテクニックです。ただし、使用する必要がある場合は、numpy.convolveこの 1 つの小さな修正を提供したいと思います。代わりに:

#First derivatives:
cf = np.convolve(f, [1,-1]) / dx
....
#Second derivatives:
ccf = np.convolve(f, [1, -2, 1]) / dxdx
...
plt.plot(x, cf[:-1], 'r--', label='np.convolve, [1,-1]')
plt.plot(x, ccf[:-2], 'g--', label='np.convolve, [1,-2,1]')

...次のように'same'オプションを使用しますnumpy.convolve

#First derivatives:
cf = np.convolve(f, [1,-1],'same') / dx
...
#Second derivatives:
ccf = np.convolve(f, [1, -2, 1],'same') / dxdx
...
plt.plot(x, cf, 'rx', label='np.convolve, [1,-1]')
plt.plot(x, ccf, 'gx', label='np.convolve, [1,-2,1]')

...1 つずれたインデックス エラーを回避するため。

また、プロットするときは x-index にも注意してください。とのポイントは同じnumy.diffnumpy.convolveなければなりません。オフバイワンエラーを修正するには(私の'same'コードを使用)、次を使用します。

plt.plot(x, f, 'k', lw=2, label='original')
plt.plot(x[1:], df, 'r.', label='np.diff, 1')
plt.plot(x, cf, 'rx', label='np.convolve, [1,-1]')
plt.plot(x, gf, 'r', label='gaussian, 1')
plt.plot(x[1:-1], ddf, 'g.', label='np.diff, 2')
plt.plot(x, ccf, 'gx', label='np.convolve, [1,-2,1]')
plt.plot(x, ggf, 'g', label='gaussian, 2')

<code>numy.diff</code> と <code>numpy.convolve</code> のポイントは同じでなければなりません!

s/bot/by/g で修正されたオートコンプリートを編集

于 2015-09-12T22:47:38.667 に答える
1

FastFD は次のことに役立ちます。

pip install fastfd

基本的なドキュメントは次の場所にあります。

https://github.com/stefanmeili/FastFD

そしてここ:

https://github.com/stefanmeili/FastFD/tree/main/docs/examples

于 2021-09-30T19:37:53.327 に答える