【问题标题】:Python lmfit - how to properly fix parameters while fitting?Python lmfit - 如何在拟合时正确修复参数?
【发布时间】:2022-10-12 23:10:53
【问题描述】:

我正在使用用户定义的模型函数来拟合具有 lmfit 的数据集。但是,我似乎无法修复该函数的某些参数,因此在拟合算法期间它们不会被更改。我已经从其他线程以及文档中使用了 cmets,但看不到问题:

import numpy as np
from lmfit import Model

data = np.loadtxt('impedance.txt')
w = data[:, 0]
y1 = data[:, 1]
y2 = data[:, 2]
z = y1/y2
f = w/(2.*np.pi)


#model function to be fitted on
def Ztot(f, RP=1E4, RS=10, C=1E-9, L=10E-3):
    return np.abs((1/((1/RP + 1/(complex(0, 1)*2*np.pi*f*L))**(-1) + RS) + complex(0, 1)*2*np.pi*f*C)**(-1))


gmodel = Model(Ztot)
params = gmodel.make_params()

params['RS'].max = 100
params['RS'].min = 0
params['C'].vary = False
print(params)

result = gmodel.fit(z, f=f)
print(result.fit_report())

但是,当我检查拟合报告时,参数发生了变化:

[[Variables]]
    RP:  75381.4485 (init = 10000)
    RS: -2280.34148 (init = 10)
    C:   3.6066e-10 (init = 1e-09)
    L:   0.06200475 (init = 0.01)

这当然不是我想要的。我错过了什么?!

【问题讨论】:

    标签: python curve-fitting lmfit


    【解决方案1】:

    太长的评论:包含您实际运行的实际代码并真正包含您获得的完整和完整的结果和错误消息集总是很重要的。您发布的代码根本无法产生该结果。

    首先,执行params = gmodel.make_params() 将产生参数而不指定它们的初始值。结果,初始值将是-Inf,这几乎肯定会导致每个模型评估立即失败——你会得到一个异常,而不是一个可行的结果。您必须始终为所有参数设置初始值。没有例外。

    但这有点无关紧要,您对C 参数的限制和修复都是无用的,因为您在对gmodel.fit() 的调用中没有包含params。

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2014-06-18
      • 2021-07-13
      相关资源
      最近更新 更多