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

使用lmfit进行曲线拟合与预测遇问题,请求协助排查

解决lmfit拟合后预测失效的问题

我帮你排查了代码里的问题,主要是预测环节的调用方式有误,还有一些细节可以优化,具体来看:

问题分析

你的代码里有两个核心问题导致预测未达预期:

  • 调用result.eval()时未传入正确的预测变量:你明明定义了预测用的x1,但代码里写的是result.eval(x)——这里的x既不是拟合时的输入,也没有被定义,直接运行会触发报错。
  • 原始数据用Python列表虽能被lmfit处理,但转换成numpy数组更符合数值计算的规范,能减少潜在的隐性问题。

修正后的代码

import numpy as np
from lmfit import Model

def linearModel(x, a0, a1):
    return a0 + a1*x

# main code begin here
# 转换为numpy数组,提升数值处理的规范性
X = np.array([1,2,4]) 
y = np.array([2,4,6]) 

gmodel = Model(linearModel)
params = gmodel.make_params(a0=1, a1=1)
result = gmodel.fit(y, params, x=X)

# 先打印拟合报告,确认参数是否符合预期
print(result.fit_report())

x1 = np.array([1, 2, 3])  # 预测输入,同样转为数组
# 关键:明确指定模型的自变量名x,传入预测用的x1
a = result.eval(x=x1) 
print("预测结果:", a)

关键说明

  1. 正确调用eval()方法:lmfit的result.eval()需要明确指定模型的自变量名(你的模型里是x),并传入预测用的数组x1,也就是result.eval(x=x1),这样模型才知道用什么数据计算预测值。
  2. 打印拟合报告:添加print(result.fit_report())可以帮你先验证拟合是否成功——比如这个线性模型拟合后,a0应该接近0,a1接近2,能快速确认参数合理性。
  3. 使用numpy数组:把列表转成numpy数组是数值计算的常规操作,能避免很多因数据类型不匹配导致的奇怪问题。

运行修正后的代码,就能得到符合预期的预测结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:41:13