我正在使用 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
提交
取消