You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取lmfit.minimize迭代过程中目标函数的数值数组?

获取lmfit.minimize迭代过程中的目标函数数值数组

你可以通过自定义迭代回调函数来收集每次迭代的目标函数值,具体步骤如下:

  1. 初始化一个空列表,用于存储迭代过程中的目标函数数值
  2. 定义回调函数,每次迭代完成后计算当前的目标函数值(残差平方和)并存入列表
  3. 在调用lmfit.minimize时,将回调函数传入callback参数

代码示例

import lmfit
import numpy as np
import matplotlib.pyplot as plt

# 自定义目标函数(返回残差,lmfit自动计算平方和作为目标值)
def objective(params, x, data):
    y = params['a'] * np.exp(-params['b'] * x) + params['c']
    return y - data

# 用于存储目标函数值的列表
fit_history = []

# 迭代回调函数:每次迭代后收集目标函数值
def iter_callback(params, iter_num, resid, *args, **kwargs):
    # 计算当前残差平方和(即目标函数值)
    chi_sq = np.sum(resid ** 2)
    fit_history.append(chi_sq)
    return True  # 返回True表示继续迭代

# 模拟实验数据
x = np.linspace(0, 10, 100)
true_a, true_b, true_c = 5, 0.3, 1
data = true_a * np.exp(-true_b * x) + true_c + np.random.normal(0, 0.2, len(x))

# 初始化拟合参数
params = lmfit.Parameters()
params.add('a', value=4)
params.add('b', value=0.2)
params.add('c', value=0.5)

# 执行拟合并传入回调函数
result = lmfit.minimize(objective, params, args=(x, data), callback=iter_callback)

# 输出迭代过程的目标函数值数组
print("迭代目标函数值序列:", fit_history)

# 绘制目标函数变化曲线
plt.plot(fit_history, marker='o', linestyle='-', color='#1f77b4')
plt.xlabel('迭代次数')
plt.ylabel('残差平方和(目标函数值)')
plt.title('拟合迭代中目标函数的变化趋势')
plt.grid(alpha=0.3)
plt.show()

补充说明

  • 回调函数的resid参数是当前迭代的残差数组,对其求平方和即可得到目标函数的数值
  • 如果你使用的是lmfit较新版本,拟合结果result的history属性可能包含迭代过程的元数据,但自定义回调的方式更灵活,能精准控制收集的内容
  • 收集到的fit_history列表可以直接用于后续分析或绘图,完全满足你保存数值数组的需求

内容的提问来源于stack exchange,提问作者kahnbiraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:52:15