如何使用 Numpy 计算导数?

新手上路,请多包涵

例如,如何计算函数的导数

y = x 2 + 1

使用 numpy

比方说,我想要导数在 x = 5 处的值…

原文由 DrStrangeLove 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 700
2 个回答

你有四个选择

  1. 有限差分
  2. 自动衍生工具
  3. 符号微分
  4. 手动计算导数。

有限差分不需要外部工具,但容易出现数值错误,如果您处于多变量情况下,可能需要一段时间。

如果您的问题足够简单,则符号微分是理想的选择。如今,符号方法变得非常强大。 SymPy 是一个与 NumPy 很好集成的优秀项目。查看 autowrap 或 lambdify 函数或查看 Jensen 关于类似问题的 博文。

自动导数非常酷,不容易出现数字错误,但确实需要一些额外的库(为此谷歌搜索,有一些不错的选择)。这是最强大但也是最复杂/最难设置的选择。如果您可以将自己限制在 numpy 语法,那么 Theano 可能是一个不错的选择。

这是一个使用 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.]

原文由 MRocklin 发布,翻译遵循 CC BY-SA 4.0 许可协议

我能想到的最直接的方法是使用 numpy 的梯度函数

 x = numpy.linspace(0,10,1000)
dx = x[1]-x[0]
y = x**2 + 1
dydx = numpy.gradient(y, dx)

这样,dydx 将使用中心差异进行计算,并将具有与 y 相同的长度,这与 numpy.diff 不同,后者使用前向差异并将返回 (n-1) 大小的向量。

原文由 Sparkler 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题