在python中拟合点的余弦平方

在python中拟合点的余弦平方,python,matplotlib,scipy,scipy-optimize,Python,Matplotlib,Scipy,Scipy Optimize,我正在尝试将余弦平方曲线拟合到我使用scipy Optimize的曲线拟合得到的数据。但不幸的是,我得到了一条直线。希望有人能帮助我 import pylab as plb import matplotlib.pyplot as plt from scipy.optimize import curve_fit from scipy import asarray as ar,exp import numpy as np x = ar(range(10)) y = ar([0,1,2,3,4,5,

我正在尝试将余弦平方曲线拟合到我使用scipy Optimize的曲线拟合得到的数据。但不幸的是,我得到了一条直线。希望有人能帮助我

import pylab as plb
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import numpy as np

x = ar(range(10))
y = ar([0,1,2,3,4,5,4,3,2,1])


def cosq(x,a,x0):
    return a*(np.cos(np.pi*x*x0)**2)

popt,pcov = curve_fit(cosq,x,y,p0=[1,1])

plt.plot(x,y,'b+:',label='data')
plt.plot(x,cosq(x,*popt),'ro:',label='fit')
plt.legend()
plt.title('Blu Blah')
plt.xlabel('Blu')
plt.ylabel('Blah')
plt.show()

我用直线拟合作为输出得到下图

我注意到,当使用曲线拟合时,起始参数非常重要,可能导致非常不同的结果。因此,如果你玩弄你的
p0
值,你应该能够获得更好的拟合

此外,可以使用边界将优化约束到区域,例如:

popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1.]))

例如,将优化限制在0的范围内,我注意到,当使用曲线拟合时,起始参数非常重要,可能会导致非常不同的结果。因此,如果你玩弄你的
p0
值,你应该能够获得更好的拟合

此外,可以使用边界将优化约束到区域,例如:

popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1.]))
例如,它将优化约束到0的区域