python应用 曲线拟合 02
前情提要
CsI 闪烁体晶体+PD+前放输出信号满足:
$U(t) = \frac{N_f\tau_p}{\tau_p-\tau_f} \left[ e^{-\frac{t}{\tau_p}}-e^{-\frac{t}{\tau_f}} \right] + \frac{N_s\tau_p}{\tau_p-\tau_s} \left[ e^{-\frac{t}{\tau_p}}-e^{-\frac{t}{\tau_s}} \right] $
其中,U(t) 表示信号输出,电压单位,N 表示闪烁体晶体发出的光中快慢成分的强度,$\tau$ 表示快慢成分的衰减时间,$\tau_p$ 表示前放衰减时间,即前放 RC 常数。
现已有 U(t) 数据,需要拟合给出快慢成分的衰减时间 $\tau$。
实现代码


- # -*- coding: utf-8 -*-
- """
- Created on Mon Jun 15 15:28:17 2020
- @author: kurrrr
- """
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy.optimize import curve_fit
- '''
- t_pre : preamplifier tau
- b: number of fast photons
- c: number of slow photons
- p: tau of fast photons
- q: tau of slow photons
- u: x offset
- v: y offset
- '''
- t_pre = 26.0
- def pre_func_1(x, v):
- return v
- def pre_func_2(x, b, c, p, q, u, v):
- global t_pre
- return (b*t_pre/(t_pre-p) *
- (np.exp(-(x-u)/t_pre)-np.exp(-(x-u)/p))
- + c*t_pre/(t_pre-q) *
- (np.exp(-(x-u)/t_pre)-np.exp(-(x-u)/q))
- + v)
- def pre_func(x, b, c, p, q, u, v):
- return np.piecewise(x, [x < u, x >= u], [lambda x: pre_func_1(x, v),
- lambda x: pre_func_2(x, b, c, p, q, u, v)])
- alpha_file = open("./gamma_csi.txt", "r")
- data_str = alpha_file.read()
- data_str = data_str.split()
- data = list(map(float, data_str))
- x = data[0::2]
- y = data[1::2]
- popt, pcov = curve_fit(pre_func, x, y, [0.6, 1.2, 1, 1, 2, 0], maxfev=5000)
- print(popt)
- plt.scatter(x, y, marker='.', label="original data")
- y_fit = ([pre_func(xx, popt[0], popt[1], popt[2], popt[3], popt[4], popt[5])
- for xx in x])
- plt.plot(x, y_fit, label="Fitted Curve", color='red')
- plt.legend(loc='upper right')
- plt.show()
- # show the fit result
- p_str = "Tf = " + str(min(popt[2], popt[3])+0.0005)[:5]
- q_str = "Ts = " + str(max(popt[2], popt[3])+0.0005)[:5]
- plt.text(60, 0.8, "fit result", fontdict={'size': 16, 'color': 'b'})
- plt.text(60, 0.7, p_str, fontdict={'size': 16, 'color': 'b'})
- plt.text(60, 0.6, q_str, fontdict={'size': 16, 'color': 'b'})
- 使用global全局变量。
- numpy 库的 piecewise() 函数写分段函数。注意这里的函数输入 x 是数组,输出也是数组。
- 从 txt 文件中读取,去空格,去换行符,转数字,切片。
- 在 curve_fit() 函数设置拟合的迭代次数。
- y_fit 列表生成器初始化列表。
- 在图片中加入文字。
$\alpha$ 信号拟合结果:
$\gamma$ 信号拟合结果:
python应用 曲线拟合 02的更多相关文章
- Python web前端 02 CSS
Python web前端 02 CSS 一.选择器 1.CSS的几种样式(CSS用来修饰.美化网页的) #建立模板 复制内容--->SETTING---> Editor -----> ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- python应用 曲线拟合04
python应用 曲线拟合04 → 多项式拟合 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲 ...
- Python数学建模-02.数据导入
数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...
- 【python】insertDB1.02
#------------------------------------------------------------------------------------ # insertDB1.02 ...
- Python标准库02 时间与日期 (time, datetime包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...
- Python获取当前时间 分类: python 2014-11-08 19:02 132人阅读 评论(0) 收藏
Python有专门的time模块可以供调用. <span style="font-size:14px;">import time print time.time()&l ...
- 【python学习笔记02】python的数据类型2
列表和元组之间的主要区别是:列表括在括号([])和它们的元素和大小是可以改变的,而元组在圆括号(),不能被更新.元组可以被认为是只读列表. 存储在一个列表中的值可以使用切片操作符来访问([]和[:]) ...
随机推荐
- Azure Application Gateway(一)对后端 Web App 进行负载均衡
一,引言 今天,我们学习一个新的知识点-----Azure Application Gateway,通过Azure 应用程序网关为我么后端的服务提供负载均衡的功能.我们再文章头中大概先了解一下什么是应 ...
- java 多态一
一 多态的概述 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学 生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一个事物的多种形态.如Studen ...
- matlab使用libsvm入门教程——使用matlab安装配置libsvm以及一个svm分类实例
前言 此教程专注于刚入门的小白, 且博客拥有时效性, 发布于2019年3月份, 可能后面的读者会发现一些问题, 欢迎底下评论出现的问题,我将尽可能更新解决方案. 我开始也在如何安装libsvm上出现了 ...
- Error:Failed to resolve: com.android.support:recyclerview-v7:28.0.0解决方法
在使用Android Studio的过程中需要添加依赖recyclerview,出现报错: Unable to resolve dependency for ':app@debug/compileCl ...
- 大侠稍等!URL 中为何出现奇怪的字符
为什么中文名称的图片打开后网址是一串乱码?为什么好好的短网址复制粘贴就变长了一大长串?罪魁祸首居然是-- 杭州终于出梅了!二狗子看到气象台发布的消息,开心的不得了.杭州的雨从五月底一直下,每天除了雨还 ...
- python设计模式之修饰器模式
python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...
- doT模板双重循环模板渲染方法
doT模板作为一个前端渲染模板,有着非常显著的有点.1.轻量.2.快捷.3.无依赖. 本文介绍一种几乎所有模板都会遇到的问题,双重循环渲染.我们知道在dot模板中循环渲染用的是{{~ it:value ...
- 金题大战Vol.0 B、序列
金题大战Vol.0 B.序列 题目描述 给定两个长度为 \(n\) 的序列\(a\), \(b\). 你需要选择一个区间\([l,r]\),使得\(a_l+-+a_r>=0\)且\(b_l+-+ ...
- [netty4][netty-handler]netty之idle handler处理
初始化时记录idle时间,并启动一个延时任务,延时时间为idle时间,延时任务是io.netty.handler.timeout.IdleStateHandler.AllIdleTimeoutTask ...
- jqgrid 自定义文本框、选择框等查询
要实现jqgrid的自定义查询可通过表格获取查询的条件,再给jqgrid表格发送postData参数. HTML: <table id="querytable" border ...