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

符号模型函数传入lmfit遇自变量无效错误,求解决方案

问题解决

报错核心原因

你定义的拟合函数g的参数是xa, anion, a,但告诉lmfit的独立变量是xCl和xI——这俩根本不在函数参数列表里,lmfit自然找不到对应自变量,所以抛出Invalid independent variable name错误。此外代码还有几个其他问题:用sympy符号运算做数值拟合、变量名混淆(定义了obj却用mod.fit)、缺少ydat数据,这些都需要一起修正。

修正后的完整代码

import numpy as np
import lmfit

# 示例数据:替换成你的真实数据即可
xCl = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
xI = np.array([0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.1, 0.8, 0.11, 0.12])
# 生成带噪声的模拟目标数据,模拟你实际要拟合的ydat
ydat = xCl * xI + 0.1 + np.random.normal(0, 0.2, size=len(xCl))

def g(xCl, xI, a):
    # 直接做数值计算,lmfit需要返回数值结果,不能用sympy符号
    xzc = xCl * xI + a
    return xzc

# 明确告知lmfit:函数g的独立变量是xCl和xI,剩余的a是拟合参数
obj = lmfit.Model(g, independent_vars=['xCl', 'xI'])
pars = obj.make_params(a=0.1)

# 调用拟合时用正确的变量名,且用关键字参数传递自变量更清晰
result = obj.fit(ydat, pars, xCl=xCl, xI=xI)
print(result.fit_report())

关键改动说明

  • 调整函数参数结构:把xCl和xI直接作为g的参数,让lmfit能识别到指定的独立变量
  • 替换符号运算为数值计算:lmfit要求拟合函数返回数值结果,sympy的符号对象无法用于数值拟合,改用numpy数组直接计算
  • 修正变量名错误:原代码定义了obj = lmfit.Model(...),却错误调用mod.fit,改为obj.fit
  • 补充模拟目标数据:原代码缺少拟合目标ydat,这里生成了模拟数据,你可以替换成自己的真实实验/观测数据
  • 用关键字参数传递自变量:调用fit时使用xCl=xCl形式,避免因参数顺序出错

内容的提问来源于stack exchange,提问作者Z. K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:24:10