【发布时间】:2020-09-19 09:52:23
【问题描述】:
我正在尝试使用以下等式拟合洛伦兹曲线: Lorentzian
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import numpy as np
# Fit a Lorentzian.
def duallorentz(x, x0, g, F,M) :
return ( (F/M) /((x0**2 - x**2)**2 + (g*x)**2)**0.5)
xdata = np.array([188.49, 191.63, 194.77, 196.66, 198.54, 200.43, 202.31 ,204.20,206.08,207.977,209.85])
ydata = np.array([0.0052, 0.0071, 0.0091, 0.0118,0.0152,0.225,0.228, 0.037, 0.017,0.012,0.009])
plt.plot(xdata, ydata, 'bo', label='experimental-data')
popt, pcov = curve_fit(duallorentz, xdata, ydata)
print(popt)
xFit = np.arange(0, 25)
plt.plot(xFit, duallorentz(xFit, *popt), 'r', label='fit params')
plt.xlabel('Frequency of the driven coupled oscillators.')
plt.ylabel('Amplitude of the driven coupled oscillators.')
plt.legend()
plt.title('Part II Data')
plt.show()
但它显示消息“warnings.warn('无法估计参数的协方差'”。这里有什么问题?
【问题讨论】:
-
可能开始猜测。检查
curve_fit文档。 -
您确定用于洛伦兹曲线的公式吗?我对
(g*x)**2)**0.5中的x有疑问 -
@Liris 检查绘图标签,它建议耦合、阻尼和驱动振荡器;所以没关系。
标签: scipy curve-fitting