我想在同一个图上绘制 cos(x) 及其导数 -sin(x) 。我做了以下事情:
import numpy as np
x = np.linspace(0,10,20) #x values: 0-10, 20 values
f = np.cos(x) # function
df = np.gradient(f) # derivative
# plot
plt.plot(f, label ="function")
plt.plot(df, label ="derivative")
plt.legend()
Run Code Online (Sandbox Code Playgroud)
在这里您已经可以看到导数的幅度存在问题。应该是1,但是大约是0.5。
如果我现在将分辨率从 20 点增加到 50 点,导数的幅度会下降得更多:
100分:
1000分:
有谁知道发生了什么事吗?
这是因为两个连续值之间假定的默认间距为 1。有关详细信息,请参阅此答案。
在您的示例中,当您使用 时np.linspace,可以通过编程方式找到间距:
sp = np.diff(x)[0]
Run Code Online (Sandbox Code Playgroud)
或者更好(感谢@Kraigolas!)
# form the array *and* get the spacing in one shot
x, sp = np.linspace(0, 10, 20, retstep=True)
Run Code Online (Sandbox Code Playgroud)
然后,
x, sp = np.linspace(0, 10, 2000, retstep=True)
f = np.cos(x)
df = np.gradient(f, sp) # change is here!
# plot
plt.plot(f, label ="function")
plt.plot(df, label ="derivative")
plt.legend()
Run Code Online (Sandbox Code Playgroud)
给出
对于其他数量的点也类似。
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |