python - Python 和 lmfit:如何绘制通过最小化函数的残差获得的多重拟合
问题描述
我想对两个数据集进行全局拟合并绘制结果。我找到了“Python 和 lmfit:如何使用共享参数拟合多个数据集?”的答案。由@M Newville 回答。修改后的代码是:
params = Parameters()
params.add('center_1', 5.0, vary=True)
params.add('amplitude_1', 10.0, vary=True)
params.add('sigma_1', 1.0, vary=True)
params.add('center_2', 8.0, vary=True)
params.add('amplitude_2', 3.0, vary=True)
params.add('sigma_2', 2.0, vary=True)
x = linspace(-10, 10, 101)
data1 = gaussian(x, 5.33, 3.21, 1.51) + random.normal(0, 0.2, x.size)
data2 = gaussian(x, 3.1, 1.21, 1.51) + random.normal(0, 0.2, x.size)
datasets = [data1, data2]
def residual(params, x, datasets):
model1 = gaussian(x, params['amplitude_1'], params['center_1'], params['sigma_1'])
model2 = gaussian(x, params['amplitude_2'], params['center_2'], params['sigma_2'])
resid1 = datasets[0] - model1
resid2 = datasets[1] - model2
return np.concatenate((resid1, resid2))
fit = minimize(residual, params, args=(x,), kws={'datasets': datasets})
print(fit_report(fit))
所以,我的问题是我想在图表中呈现数据和拟合结果,但我不知道该怎么做?拜托,有人能给我一个线索吗?
编辑:
我的新代码将是:
params = Parameters()
params.add('cen', 5.0, vary=True)
params.add('amp', 10.0, vary=True)
params.add('sig', 1.0, vary=True)
params.add('pen', 8.0, vary=True)
params.add('inter', 3.0, vary=True)
def reta(x, a, c):
return a * x + c
x = linspace(-10, 10, 101)
data1 = gaussian(x, 5.33, 3.21, 1.51) + random.normal(0, 0.2, x.size)
data2 = reta(x, 3.1, 1) + random.normal(0, 0.2, x.size)
datasets = [data1, data2]
def residual(params, x, datasets):
model1 = gaussian(x, params['amp'], params['cen'], params['sig'])
model2 = reta(x, params['pen'], params['inter'])
resid1 = datasets[0] - model1
resid2 = datasets[1] - model2
return np.concatenate((resid1, resid2))
fit = minimize(residual, params, args=(x,), kws={'datasets': datasets})
print(fit_report(fit))
plt.figure()
plt.plot(x, data1)
plt.plot(x, data2)
如果我只有一个功能,我可以绘制这个:
plt.plot(x, residual(fit.params) + data1, 'r', label='best fit')
但是对于两个模型,我遇到了问题。
解决方案
推荐阅读
- active-directory - 加入域的用户可以看到域上的所有用户和组吗?
- html - 我如何在引导程序的中心显示这张图片?
- javascript - 我在让我的机器人复制文本然后将其发回时遇到问题
- python - APScheduler 后台调度程序不工作?
- python - 使用 Python/Flask-SQLAlchemy 代码在 sqlite 中存储数据的问题
- list - Flutter - 如何制作List数组
- javascript - 未捕获的类型错误:无法在“窗口”上执行“requestAnimationFrame”:作为参数 1 提供的回调不是函数
- variables - 如何在 SSIS 的 DAX 查询中传递 sql 参数
- java - 转储 springboot 配置属性
- ios - 使用模型向下载的 MySQL 数据添加局部变量