我正在使用 lmfit 将一些数据拟合到两个反应系统以估计速率常数。我的数据是 x1、x2 和 x3 物种在 x1 -> x2 -> x3 中的浓度变化在其他工具中,我通常使用全局优化器,然后使用局部优化器,这样我就可以更轻松地访问 Hessian 等。在 lmfit 中,我认为我可以做类似的事情:minimizer = lmfit.Minimizer(self._residuals, params)
result = minimizer.minimize(method='differential_evolution')
result = minimizer.minimize(method='leastsqr')我假设差分进化拟合的参数将保留在最小化对象中,并由第二个最小化函数调用自动获取。但是,我不确定,因为我的同事另有建议。如果有人更了解 lmfit 包,那么第二个最小化是否会在第一个最小化停止的地方获取参数?更新 1:我添加了 Minimize 调用以确保只创建一个 Minnizmize 对象。我当前的测试似乎表明参数值确实从一个最小化调用传递到另一个调用(这是我所期望的)。更新 2:进一步的实验表明,如果系统是不可识别的,则存在差异,这意味着第一次最小化调用似乎不会将其拟合参数传递给第二个最小化调用。
1 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
不,第一种方法的拟合参数将不会用于您提供的代码的第二次最小化。
如果您没有指定任何内容,minimizer.minimize()它将从params您提供的初始化Minimizer类开始。下面的代码应该做你想做的:
minimizer = lmfit.Minimizer(self._residuals, params)
result_de = minimizer.minimize(method='differential_evolution')
result = minimizer.minimize(params=result_de.params, method='leastsqr')
(我在这里假设这self._residuals是您的拟合函数,即您想要最小化的函数)。请在此处查看文档。
添加回答
举报
0/150
提交
取消