gpt4 book ai didi

python - 访问 lmfit 中的 params 属性

转载 作者:太空宇宙 更新时间:2023-11-03 17:02:57 24 4
gpt4 key购买 nike

我正在尝试使用文档网站中的 lmfit 来完成一个示例:

import sys

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.backends.backend_pdf import PdfPages

from lmfit import minimize, Parameters, Parameter, report_fit, Minimizer, conf_interval, conf_interval2d, printfuncs
from lmfit import Model

def main():
def decay(t, N, tau):
return N*np.exp(-t/tau)

decay_model = Model(decay)
print decay_model.independent_vars
for pname, par in decay_model.params.items():
print pname, par

if ___name___ == "___main___":
main()

当我执行最后一个命令时,出现以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Model' object has no attribute 'params'

看来params不是Model的属性。有人可以解释为什么这段代码不起作用吗?我在多台计算机和 Python 版本上进行了尝试。在 Python 2.7.9 32 位、Windows 7 上运行。

最佳答案

可能导致问题的事情是 - 假设这确实是您的整个代码 - 您没有使用任何数据进行拟合,并且没有在任何地方初始化参数字典。下面是一个最小的示例,适用于 0.8.3 版本(请参见下面的输出);如果您使用 0.9.x,则必须稍微调整一部分(检查 here 从 0.8.3 到 0.9.x 进行了哪些更改)。

import numpy as np
import matplotlib.pyplot as plt
from lmfit import minimize, Parameters, Parameter, report_fit

# generate some data with noise
# replace xData and yData with your data
xData = np.linspace(0., 100., 50.)
Nf = 5.
tauf = 6.5
yData = Nf * np.exp(-xData / tauf) + np.random.normal(0, 0.5, len(xData))
# plt.plot(xData, yData, 'bo')
# plt.show()

def decay(params, x, data):

N = params['N'].value
tau = params['tau'].value

model = N * np.exp(-x/tau)
return model - data # that's what you want to minimize

# create a set of Parameters
params = Parameters()
params.add('N', value=10) # value is the initial value
params.add('tau', value=8.)

# do fit, here with leastsq model
result = minimize(decay, params, args=(xData, yData))

# calculate final result
final = yData + result.residual

# write error report
report_fit(params)

# plot the data
plt.plot(xData, yData, 'bo')
plt.plot(xData, final, 'r')
plt.show()

首先,我使用您的衰减函数创建一些数据并向其添加一些噪声;这部分应该替换为您的数据。其余部分很简单,您将得到以下输出(由于数据中添加了噪声,因此确切的值可能会有所不同):

[[Variables]]
N: 5.15685000 +/- 0.419115 (8.13%) (init= 10)
tau: 6.58557758 +/- 0.877337 (13.32%) (init= 8)

正如您所看到的,确定的参数与我为数据生成选择的参数非常接近。绘制数据和拟合结果如下:

enter image description here

lmfit 的好处是您可以使用参数值的边界。您可以查看示例here.

希望这能让您入门,如果您有任何其他问题,请告诉我。

关于python - 访问 lmfit 中的 params 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34870104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com