我在下面找到了一些示例数据,我试图使两个曲线拟合。第一个是基于正弦和余弦的总和,我能够使用statsmodels OLS函数。
ny = len(y_arr)
nparams = 5
xa1 = np.cos(2*np.pi*1*x_arr)
xb1 = np.sin(2*np.pi*1*x_arr)
xa2 = np.cos(2*np.pi*2*x_arr)
xb2 = np.sin(2*np.pi*2*x_arr)
matr = np.ones((ny,nparams),dtype=float)
matr[:,1] = xa1
matr[:,2] = xb1
matr[:,3] = xa2
matr[:,4] = xb2
model = sm.OLS(y_arr, matr)
results = model.fit()
print(results.summary())
这给出了系数a0 = 1.1463,a1 = -3.928,b1 = 0.5352,a2 = -0.4091,b2 = -0.3514
但是,现在我想利用这些信息来计算出给定幅度和相位的正弦函数之和的拟合,即:
从我所看到的情况来看,当必须同时计算振幅和相位时,OLS无法处理正弦拟合的总和。是否还有其他任何人曾用过类似的套装?
答案 0 :(得分:0)
这些系列密切相关:
A_k = sqrt(a_k**2 + b_k**2)
phi_k = -atan(b_k/a_k)
因此,在计算a_k
和b_k
后,您可以轻松获得A_k
和phi_k
使用上面的转换。