如何解决为什么我得到一条最适合指数衰减曲线的直线
大家好, 我正在尝试在 Python 中拟合双指数衰减函数的曲线。我使用的代码如下。我不知道为什么我会得到一条适合的直线。我欢迎对我的代码提供任何帮助和建议,这会很有帮助。
xData = np.array(xData)
yData = np.array(yData)
def double_exp(x,a1,t1,a2,t2):
return a1*np.exp(-x/t1) + a2*np.exp(-(x-0.1) / t2)
mod=Model(double_exp)
result=mod.fit(yData,x=xData,a1=0.7,t1=0.5,a2=0.3,t2=10)
result.plot()
plt.grid()
plt.xlabel('Time')
plt.ylabel('Fluoresence Lifetime')
我的列表 xData 和 yData 的示例数据值是
[![xData is \[2.50783699e-09 5.01567398e-09 7.52351097e-09 1.00313480e-08
1.25391849e-08 1.50470219e-08 1.75548589e-08 2.00626959e-08
2.25705329e-08... etc\]
yData is \[ 1025. 1032. 1101. 1138. 1205. 1086. 1692. 13515. 59434. 82067.64293. 52266. 43993. 35335. 30066. 29989. 33773. 30521. 26468. 26338.27233. 26276. 24109....etc\]][1]][1]
解决方法
我向所有阅读本文的人道歉,因为在这里回答有点超出 StackOverflow 的规范。这更像是一个长评论而不是一个答案,这与发布者在过去几个月中提出了许多关于使用 lmfit 库的类似问题有关。
@Angela Mary 您可能会得到一条直线,因为您的初始值不够接近,无法细化。
使用 lmfit 时,您绝对必须为要优化的所有参数提供真实的初始值。在任何情况下都不能忽略这一点。如果您不太确定您的初始值是否合理,请在尝试拟合之前 用初始参数值绘制数据和模型。进行拟合时,您是在断言您知道初始值是近似数据的合理值。
一个推论:当你给它不合理的初始值时,它没有找到一个好的解决方案并不是算法或库的错误。这应该是意料之中的。
试穿后,请务必打印并阅读试穿报告。这包含了原理结果。结果拟合的图可能很有用——正如他们所说,一张图片值一千字。但是拟合结果中包含了拟合结果的表格,一张数字表格值一千张图片。让我再说一遍:始终打印并实际阅读拟合报告。请勿在未包含此报告的情况下发布有关 lmfit 结果的问题。
StackOverflow 的重点在于编码。问题应该强调如何使用库,而不是它给出的结果。这意味着您不太可能得到关于为什么模型与特定数据不匹配的非常有意义的答案。提出有关如何做事的问题。
因为论坛是关于编码的,所以总是包含一个最小的、完整的例子来说明问题。如果“最小的、完整的例子”这句话对你来说是陌生的,那么考虑一下你的第一个家庭作业。此处发布的代码需要完整且可由其他人运行。需要包括输出报告。如果您在运行代码时遇到异常,请发布完整的回溯。不要编辑结果:逐字张贴。这些不是建议或“如果您认为合适”。这些是要求。
如果您要拟合数据(或对数据进行任何其他计算),请在代码本身或作为现成的数据文件中包含该数据。由于您的示例已经被制作成一个最小的、完整的示例,因此数据不需要很大。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。