为什么我的导数不等于理论值?
Why my derivative is not equal to theorical value?
我对正弦信号进行微分计算。
我制作了简单的 python 程序来测试它:
signal = np.sin(time_s.to_numpy())
for index in range(1, len(signal)-1):
first[index] = signal[index ]-signal[index -1] /(2*dt) * 100
second[index] = signal[index+1 ] - 2*signal[index ]+signal[index -1] /(dt*dt)
signal_display[index] = signal[index ]* 2000
我的一阶导数函数应该是余弦?
给定时间序列和信号:
>>> time_s = np.linspace(0, 15, 1000)
>>> signal = np.cos(time_s)
现在,导数由 f'(x) = (f(x + dt) - f(x)) / dt
给出。其中 dt
是时间步长:
>>> dt = time_s[1] - time_s[0]
0.015
你可以用np.roll
来计算:
>>> d1 = (np.roll(signal, -1) - signal) / dt
或通过 (signal[1:] - signal[:-1]) / dt
.
使用切片
你可以绘制两者 (sin' = cos
):
>>> plt.plot(time_s, signal)
>>> plt.plot(time_s[:-1], d1[:-1])
同样,您可以使用 f''(x) = (f(x + dt) - 2f(x) + f(x - dt)) / dt²
给出的二阶导数来执行此操作:
>>> d2 = (np.roll(signal, -1) - 2*signal + np.roll(signal, 1)) / dt**2
这里是剧情(sin'' = -sin
):
>>> plt.plot(time_s, signal)
>>> plt.plot(time_s[1:-2], d2[1:-2])
您在导数的分子中缺少括号,并且您对它们进行了不恰当的缩放。它们应该如下所示:
first[index] = (gyroX_filtered[index] - gyroX_filtered[index - 1]) / dt
second[index] = (gyroX_filtered[index + 1] - 2 * gyroX_filtered[index] + gyroX_filtered[index - 1]) / dt**2
我对正弦信号进行微分计算。 我制作了简单的 python 程序来测试它:
signal = np.sin(time_s.to_numpy())
for index in range(1, len(signal)-1):
first[index] = signal[index ]-signal[index -1] /(2*dt) * 100
second[index] = signal[index+1 ] - 2*signal[index ]+signal[index -1] /(dt*dt)
signal_display[index] = signal[index ]* 2000
我的一阶导数函数应该是余弦?
给定时间序列和信号:
>>> time_s = np.linspace(0, 15, 1000)
>>> signal = np.cos(time_s)
现在,导数由 f'(x) = (f(x + dt) - f(x)) / dt
给出。其中 dt
是时间步长:
>>> dt = time_s[1] - time_s[0]
0.015
你可以用np.roll
来计算:
>>> d1 = (np.roll(signal, -1) - signal) / dt
或通过 (signal[1:] - signal[:-1]) / dt
.
你可以绘制两者 (sin' = cos
):
>>> plt.plot(time_s, signal)
>>> plt.plot(time_s[:-1], d1[:-1])
同样,您可以使用 f''(x) = (f(x + dt) - 2f(x) + f(x - dt)) / dt²
给出的二阶导数来执行此操作:
>>> d2 = (np.roll(signal, -1) - 2*signal + np.roll(signal, 1)) / dt**2
这里是剧情(sin'' = -sin
):
>>> plt.plot(time_s, signal)
>>> plt.plot(time_s[1:-2], d2[1:-2])
您在导数的分子中缺少括号,并且您对它们进行了不恰当的缩放。它们应该如下所示:
first[index] = (gyroX_filtered[index] - gyroX_filtered[index - 1]) / dt
second[index] = (gyroX_filtered[index + 1] - 2 * gyroX_filtered[index] + gyroX_filtered[index - 1]) / dt**2