python - 将函数和颤动结果绘制到相同的图形问题
问题描述
在下面的代码中,我试图找出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()
我只是想知道是否有人能看到我哪里出错了,感谢任何帮助。
解决方案
查看quiver 文档,您会发现调用签名:
quiver(U, V, **kw) quiver(U, V, C, **kw) quiver(X, Y, U, V, **kw) quiver(X, Y, U, V, C, **kw)
这些是理解位置参数的方式。这意味着在您的情况下,它分别理解x
asU
和Ex
as V
、beingU
以及V
箭头向量的 x 和 y 分量。因此,由于没有提供向量的 x 和 y 位置,它会绘制从 0 到数组长度的箭头,每个箭头从整数位置开始,在您的情况下,从 0 到 200。
为了解决这个问题,首先要注意的是quiver
的描述是绘制一个二维箭头场。. 它是一个内在的二维函数。因此,为了实现您想要的输出,我们必须提供箭头的 x 和 y 位置,即x
和f
。而且,它的 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),就像在这种情况下一样。
推荐阅读
- python - 如何从多个 csv 文件中获取每 X 行的列的平均值
- tensorflow - 如何让 Google Cloud AI Platform 在训练期间检测 `tf.summary.scalar` 调用?
- redis - Redis公牛连接错误ECONNREFUSED 127.0.0.1:6379
- c# - 如何从设置中读取字典数组
- excel - 当我使用 INDIRECT 向下拖动时,行号不会更新
- java - Java 1.6 上 Base64 的替代方案?
- mysql - MySQL:用户 root@localhost 的访问被拒绝
- java - 将 pojo 类列表中的值放入 hashmap
- php - 我在使用 Wordpress 函数 get_template_part() 时遇到问题
- javascript - 使用纯 JavaScript 通过 Websocket 连接到 MQTT 代理