我将通过定义一个
fourier接受可变数量参数的单个函数,使用遍历余弦的循环为每个输入点评估函数来实现这一点:
def fourier(x, *a): ret = a[0] * np.cos(np.pi / tau * x) for deg in range(1, len(a)): ret += a[deg] * np.cos((deg+1) * np.pi / tau * x) return ret
由于此函数采用可变数量的参数,因此您需要提供正确维数的起始位置作为对该
curve_fit函数的提示,以便它知道要使用的余弦数。在示例中,您提供了8个余弦:
popt, pcov = curve_fit(fourier, z, Ua, [1.0] * 8)
现在,您要查询的用例(适合15个谐波并绘制前三个谐波)可以通过以下方式完成:
# Fit with 15 harmonicspopt, pcov = curve_fit(fourier, z, Ua, [1.0] * 15)# Plot data, 15 harmonics, and first 3 harmonicsfig = plt.figure()ax1 = fig.add_subplot(111)p1, = plt.plot(z,Ua)p2, = plt.plot(z, fourier(z, *popt))p3, = plt.plot(z, fourier(z, popt[0], popt[1], popt[2]))plt.show()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)