使用scipy优化curve_fit求解余弦函数的偏移参数的问题

时间:2013-10-10 16:40:11

标签: python scipy curve-fitting least-squares

我正在尝试解决余弦函数的相位偏移。我正在寻找[0,2 * pi]之间的值。

使用scipy.optimize.curvefit来探索这个我创建了一个玩具功能,如下:

import scipy.optimize as optimize
import numpy as np
import matplotlib.pyplot as plt

# DATA
angles = np.array([0, 45, 90, 135, 180, 225, 270, 315])
angles = np.radians(angles)
offset = np.radians(176)
data = np.cos(np.radians(np.linspace(0,315,8))-offset)

plt.plot(np.degrees(angles), data)

# COSINE FUNCTION
def func(theta, k, b, p):
    return b + k*np.cos(theta-(p))

# COSINE FIT
popt, pcov = optimize.curve_fit(func, angles, data)

# COSINE COMPUTATION
yn = func(angles, popt[0], popt[1], popt[2])
plt.plot(np.degrees(angles), yn, color='r', linestyle='--')
print np.degrees(popt[2])

在上面的例子中,我创建了一个相位偏移为176度的余弦函数。当我解决相位偏移时,我收到了-4。我知道你可以通过(180-4)到达这个,但我不明白潜在的行为。例如,如果偏移设置为等于190,则输出将为10.结果,我不知道(没有目视检查曲线)拟合是否在区间[0,pi]或[pi,2pi] ]

感谢任何建议。

1 个答案:

答案 0 :(得分:2)

刷新你的知识。你不应该期望180。