首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用lmfit模型对多峰数据进行最佳拟合

使用lmfit模型对多峰数据进行最佳拟合
EN

Stack Overflow用户
提问于 2019-03-23 21:56:19
回答 1查看 672关注 0票数 -1
代码语言:javascript
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import numpy as np
from lmfit import Model
x=np.array([4698.031, 4698.027, 4698.024, 4698.021, 4698.017, 4698.014,4698.011, 4698.007, 4698.004, 4698.001, 4697.997, 4697.994, 4697.991, 4697.987, 4697.984, 4697.981, 4697.977, 4697.974, 4697.971, 4697.967, 4697.964, 4697.961, 4697.957, 4697.954, 4697.951, 4697.947, 4697.944, 4697.941, 4697.937, 4697.934, 4697.931, 4697.927, 4697.924, 4697.921, 4697.917])
y=np.array([0.56565, 0.586575, 0.70335, 0.991245, 1.447545, 4.944375, 11.97281, 18.22095, 19.7613, 17.13792, 13.35083, 10.26506, 7.898505, 5.084775, 2.4192, 1.34358, 0.829905, 1.31322, 3.2049, 4.0095, 2.83263, 1.51605, 0.643275, 0.48972, 0.432675, 0.084375, 0.135345, 0.362145, 0.34425, 0.307125, 0.469125, 0.297, 0.183255, 0.528855, 0.523125])
gmodel = Model(gaussian, prefix='p1_') + Model(gaussian, prefix='p2_')
params = gmodel.make_params(p1_amp=0.1, p1_cen=4697.97, p1_wid=0.005, p2_amp=0.5, p2_cen=4698.00, p2_wid=0.005)


params['p1_cen'].min = x.min()
params['p1_cen'].max = 4697.98
params['p2_cen'].min = 4697.98
params['p2_cen'].max = x.max()

result = gmodel.fit(y, params, x=x)

更新了程序的几个问题

  1. ,当我运行这个程序时,它给我一个错误。回溯(最近一次调用):

文件"",第7行,gmodel =Model(高斯,前缀=‘p1_’)+模型(高斯,前缀=‘p2_’)

NameError:未定义名称“”gaussian“”

为此,我包含了from lmfit.lineshapes import gaussian,并且它是有效的。

是对还是错??

  1. 添加库/包后,程序显示回溯(最近一次调用):

文件"",第9行,参数‘p1_’..min= x.min()

KeyError:'p1_cen‘

帮我解决这个问题。

  1. 删除params之后,程序运行没有任何错误,但是我该怎么做才能显示给定数据n最佳拟合数据的曲线图。我只是对给定的数据执行了plt.plot(x,y),但不知道如何才能获得最合适的数据.....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-24 05:11:38

你需要给出更好的开始猜测。您的数据x范围从4697.8到4698.0,但是您最初对cen的猜测是1.0,远远超出了您的数据范围。将数据的初始值更改为更合理的值。

解决如何拟合两个峰值的问题的更新:

要拟合两个峰值,可以创建一个复合模型,如下所示

代码语言:javascript
运行
AI代码解释
复制
gmodel = Model(gaussian, prefix='p1_') + Model(gaussian, prefix='p2_')

result  = gmodel.fit(y, x=x, p1_amp=0.1, p1_cen=4697.97, p1_wid=0.005,
                     p2_amp=0.5, p2_cen=4698.00, p2_wid=0.005)

这将创建一个将2个高斯相加在一起的模型,并为一个模型的参数名称提供前缀p1_,为另一个模型的参数提供前缀p2_。然后,您可以在进行拟合时为每个参数指定初始值。

通常建议为每个模型创建一个lmfit.Parameters实例,这样可以进一步操作参数设置,例如设置上下限。对于这种模型,确保峰值不能重叠太近或重叠可能会有所帮助。你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
gmodel = Model(gaussian, prefix='p1_') + Model(gaussian, prefix='p2_')

params = gmodel.make_params(p1_amp=0.1, p1_cen=4697.97, p1_wid=0.005,
                            p2_amp=0.5, p2_cen=4698.00, p2_wid=0.005)
params['p1_cen'].min = x.min()
params['p1_cen'].max = 4697.98
params['p2_cen'].min = 4697.98
params['p2_cen'].max = x.max()

result = gmodel.fit(y, params, x=x)

它为每个模型的cen参数设置min/max值,以便它们不能互换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55318773

复制
相关文章
canvas简单线条的绘制
1.绘制线条之前首先进行声明线条开始绘制代码context.beginPath;说明:context是画板中获得的绘画环境上述的是cv
十月梦想
2018/08/29
9580
canvas画布实现矩形的绘制
绘制一个实心矩形cv.fillRect(x,y,width,height)绘制之前声明绘制的实心矩形颜色使用fillStyle
十月梦想
2018/08/29
2.6K0
bootstrap 表格 带边框
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
用户5760343
2022/01/10
1.1K0
bootstrap 表格 带边框
软件测试|超好用超简单的Python GUI库——tkinter(十四)
我们知道我们可以使用pillow绘制不同形状的图形,但是我们能不能使用tkinter实现这个功能呢,当然可以,tkinter也可以实现图形的绘制,并且可以将绘制的图形添加到我们的GUI中。
霍格沃兹测试开发Muller老师
2023/06/02
9920
巧妙实现带圆角的渐变边框
border-image 是 CSS 规范 CSS Backgrounds and Borders Module Level 3 (最新一版的关于 background 和 border 的官方规范) 新增的一个属性值。
Sb_Coco
2020/02/21
7.1K1
巧妙实现带圆角的渐变边框
IOS – OpenGL ES 绘制线条 GPUImageLineGenerator
GPUImageLineGenerator 属于 GPUImage 图像处理相关,用来处理图片线条效果,shader 源码如下:
猿说编程[Python和C]
2023/03/25
5340
Canvas两点连线及多点连线
使用html5 Canvas绘制直线所需的CanvasRenderingContext2D对象的主要属性和方法(有”()”者为方法)如下:
javascript.shop
2019/09/04
9.4K0
H5-使用canvas绘制
canvas标签用于绘制图画,它是通过js来实现图画的绘制,这里将学习一下其基本用法。 首先,创建一个画布,这样我们就可以在上面进行创作了。
kdyonly
2023/03/03
9240
WPF 绘制对齐像素的清晰显示的线条
发布于 2017-12-12 13:49 更新于 2018-08-13 12:47
walterlv
2018/09/18
1.6K0
WPF 绘制对齐像素的清晰显示的线条
IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字
假设把上面的方法放入到一个类 DrawUtil 中,我们可以通过 DrawUtil 来调用方法。
张云飞Vir
2020/03/16
1.8K0
用Python绘制棒棒糖图表,真的好看!
此外还可以调整lw、markersize参数,定义线条的粗细及标记的大小,甚至可以绘制两次线条以创建轮廓效果。
咋咋
2021/09/01
1.3K0
用Python绘制棒棒糖图表,真的好看!
canvas知识点
HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形。 你可以通过多种方法使用Canva绘制路径,盒、圆、字符以及添加图像。
HUC思梦
2020/09/03
8920
用Python绘制棒棒糖图表,真的好看!
此外还可以调整lw、markersize参数,定义线条的粗细及标记的大小,甚至可以绘制两次线条以创建轮廓效果。
小F
2021/05/17
1.5K0
用Python绘制棒棒糖图表,真的好看!
Canvas网页涂鸦板再次增强版
点击这里 http://qkongtao.cn//file/graffiti.html
不愿意做鱼的小鲸鱼
2022/09/24
1.3K0
Canvas网页涂鸦板再次增强版
flutter画布绘制图片和文字
本节目标: [1]. 了解如何获取 [ui.Image] 对象。 [2]. 将一张图片使用 Canvas 绘制出来。 [3]. 知道如何从图片中取出部分图片绘制到指定矩形域中。 [4]. 了解 Canvas 绘制图集的操作。 [5]. 如何在 Canvas 中绘制文字,并完善坐标系刻度。 ---- 一、图片绘制: image-20201030110334887 绘制图片需要的是 ui.Image,需要异步加载,这里用 loadImageFromAssets 处理。 PaperPainter 接收 u
用户1974410
2022/09/20
2.6K0
flutter画布绘制图片和文字
Python+matplotlib绘制海螺贝壳上美丽的线条
在海洋中的亿万只海螺中,大部分都是右旋螺纹,从底部看的话海螺开口在右边,如下图所示:
Python小屋屋主
2019/05/15
1.5K0
手写原生代码专题 | 简易手写画板(二)
如视频所示,在这个示例中,我们用到了画布 canvas 相关的知识,比如创建画布、画圆形、画直线的基础知识,有了这些基础后,我们就能轻松完成本示例,示例效果如下视频所示。
前端达人
2021/07/16
1.5K0
点击加载更多

相似问题

绘制带边框的线条

12

Java绘制带边框的线条

11

画布中带渐变的线条绘制

122

在画布android中绘制带边框的文本

14

使用画布绘制线条

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档