如何使用lmfit生成可替换sigma和n参数的不同模型?
解决lmfit模型生成函数的参数绑定问题
问题根源在于functools.partial的位置参数绑定逻辑:你直接按位置传入sigma和n,会错误地将它们绑定到PnE的前两个参数(E和sigma),导致lmfit.Model解析时,把原本的拟合参数E_k识别为未定义变量。
以下是两种可行的解决方案:
方法一:使用关键字参数固定目标参数
通过functools.partial的关键字参数绑定,明确指定要固定的sigma和n,避免位置混淆:
import functools from lmfit import Model import numpy as np def PnE(E, sigma, n, E_k, overlap): return ((1+np.exp(-(E_k-E)*sigma))**n*overlap) def fit_PnE(sigma, n): # 用关键字参数固定sigma和n,保留E、E_k、overlap为拟合相关参数 G = functools.partial(PnE, sigma=sigma, n=n) model = Model(G) return model
方法二:嵌套函数直接固定参数
通过定义内部函数,直接引用外部传入的sigma和n,逻辑更直观:
from lmfit import Model import numpy as np def PnE(E, sigma, n, E_k, overlap): return ((1+np.exp(-(E_k-E)*sigma))**n*overlap) def fit_PnE(sigma, n): def fixed_PnE(E, E_k, overlap): return PnE(E, sigma, n, E_k, overlap) model = Model(fixed_PnE) return model
两种方法都能实现固定sigma和n的需求,让lmfit正确识别E(自变量)、E_k、overlap为拟合参数。
内容的提问来源于stack exchange,提问作者IGY
相关产品推荐
相关产品推荐

