如何使用以下3种方法在text-align:center
中使用scipy.optimize import curve_fit
拟合非线性数据:
我只能从我的数据文件链接和绘图。
Python
请建议我如何为此数据提交行。我不想要直装。我想要顺利配合。
答案 0 :(得分:4)
一般情况下,scipy.optimize.curve_fit
一旦我们知道最适合我们数据集的等式,就可以正常工作。由于您希望拟合遵循高斯,洛伦兹等分布的数据集,因此您可以通过提供其特定方程式来实现。
就像一个小例子:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
xdata = np.array([-2,-1.64,-1.33,-0.7,0,0.45,1.2,1.64,2.32,2.9])
ydata = np.array([0.69,0.70,0.69,1.0,1.9,2.4,1.9,0.9,-0.7,-1.4])
def func(x, p1,p2):
return p1*np.cos(p2*x) + p2*np.sin(p1*x)
# Here you give the initial parameters for p0 which Python then iterates over
# to find the best fit
popt, pcov = curve_fit(func,xdata,ydata,p0=(1.0,0.3))
print(popt) # This contains your two best fit parameters
# Performing sum of squares
p1 = popt[0]
p2 = popt[1]
residuals = ydata - func(xdata,p1,p2)
fres = sum(residuals**2)
print(fres)
xaxis = np.linspace(-2,3,100) # we can plot with xdata, but fit will not look good
curve_y = func(xaxis,p1,p2)
plt.plot(xdata,ydata,'*')
plt.plot(xaxis,curve_y,'-')
plt.show()
以上是针对我的具体情况,其中我只使用了适合我的数据集的Harmonic addition formula。您可以通过在func
定义中提供它来相应地更改高斯方程或任何其他方程。
您的参数会有所不同。如果是高斯分布,则将sigma
(标准偏差)和mean
作为未知参数。