绘制函数和颤动结果到同一图形问题

时间:2018-11-05 20:27:07

标签: python numpy matplotlib

在下面的代码中,我试图找出python中渐变的工作原理并绘制其结果。

当我在不使用plt.plot(x,f)的情况下运行代码时,根据我的知识,梯度向量似乎是合理的(x轴除外,因为它不在-100到100之间,我也不知道为什么)。但是,当我尝试在功能线上看到这些向量时,出现了问题。我的代码如下:

from numpy import *
import matplotlib.pyplot as plt

x = mgrid[-100:101:1]
f = x**2

Ex = gradient(f)

fig = plt.figure(1)
ax = fig.gca()
ax.quiver(x,Ex)
ax.plot(x,f)
plt.show()

我只是想知道是否有人可以看到我哪里出了问题,对我们的帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

看看quiver documentation,您会发现呼叫签名

quiver(U, V, **kw)
quiver(U, V, C, **kw)
quiver(X, Y, U, V, **kw)
quiver(X, Y, U, V, C, **kw)

这些是理解位置参数的方式。这意味着在您的情况下,将x理解为U,将Ex理解为V,分别是x和y的UV箭头向量的两个分量。因此,由于没有提供向量的x或y位置,因此它绘制从0到数组长度的箭头,每个箭头都从整数位置开始(在您的情况下为0到200)。

要解决此问题,首先要注意的是quiver的描述是绘制箭头的二维字段。。它是固有的二维功能。因此,为了获得所需的输出,我们必须提供箭头的x和y位置,分别为xf。而且,它的x和y箭头分量很容易从渐变Ex中计算出来。渐变大致为 dy / dx ,因此,一旦知道了渐变 f',xy平面中代表它的箭头就是(u,v)=( l,f'* l),其中 l x数组中的间距。

最终,改为使用以下命令进行绘制:

plt.quiver(x,f,np.ones_like(Ex),Ex,angles='xy')

解决了问题。 angles='xy'使箭头从(x,y)指向(x + u,y + v),在这种情况下应该如此。