拟合函数参数和误差——方法(1)leastsq

python的Scipy.optimize中有函数可以用来拟合函数,可以用来求参数和误差。需要有一组数据X,假设其为高斯分布,求其分布参数μ,σ\mu,\sigmaμ,σ。可以先有scipy的leastsq计算其初步的参数,然后再由lmfit模块求更精确的参数以及其不确定度。代码为:

import math
import numpy as np
import lmfit
import matplotlib.pyplot as plt
from scipy.optimize import leastsqdef Gauss(t,para):A,sig,tp = para#print(t)return A*math.e**(-((t-tp)**2)/(2*(sig**2)))###需要拟合的函数func及误差error###
def ReGauss(para,pul,t):### 误差#print("ERR:",(pul - Gauss(t,para))**2)return (pul - Gauss(t,para))
def residual(p):v = p.valuesdict()return v['A']*math.e**(-((x-v['mean'])**2)/(2*(v['sig']**2))) -ybwith=1.5np.random.seed(1000)
alpha = np.random.normal(-2,3,100) #存成二进制序列、方便读取num_bin = 24n_hist,edges = np.histogram(alpha,bins=num_bin,range=(-8,4))
num_hist = np.array(n_hist)alpha_m = np.mean(alpha)
alpha_std = np.std(alpha)alpha_x = np.arange(-8,4,0.5)p_init = [1,alpha_std,alpha_m]
para,pcov,infodict,errmsg,success = leastsq(ReGauss,p_init,args=(n_hist,alpha_x),full_output=1)## 计算 拟合参数的不确定度
para_lmft =  lmfit.Parameters()
para_lmft.add_many(('A',para[0]),('sig',para[1]),('mean',para[2]))
x =  np.arange(-8,4,0.5)
y = n_hist
mi = lmfit.minimize(residual, para_lmft,method='nelder', nan_policy='omit')
lmfit.printfuncs.report_fit(mi.params, min_correl=0.5)res = lmfit.minimize(residual, method='emcee', nan_policy='omit', burn=300, steps=1000,thin=20,params=mi.params, is_weighted=False, progress=False)highest_prob = np.argmax(res.lnprob)
hp_loc = np.unravel_index(highest_prob, res.lnprob.shape)
mle_soln = res.chain[hp_loc]
for i, par in enumerate(para_lmft):para_lmft[par].value = mle_soln[i]print('\nMaximum Likelihood Estimation from emcee       ')
print('-------------------------------------------------')
print('Parameter  MLE Value   Median Value   Uncertainty')
fmt = '  {:5s}  {:11.5f} {:11.5f}   {:11.5f}'.format#print(para_lmft.items(name))para_last = []
err = []
for name, param in para_lmft.items():para_last.append(param.value)err.append(res.params[name].stderr)print(fmt(name, param.value, res.params[name].value,res.params[name].stderr))print("参数A,sig,mean为:",para_last)
print("参数A,sig,mean不确定度为:",err)alpha_x = np.linspace(-12,8,10000)
alpha_y = Gauss(alpha_x,para_last)print("Mean alpha",alpha_m)
plt.figure(figsize=(12,9),dpi=100)ax = plt.subplot()plt.tick_params(labelsize=13.5)
ax.tick_params(which='both',top=True,bottom=True,left=True,right=True)
ax.spines['bottom'].set_linewidth(bwith)
ax.spines['left'].set_linewidth(bwith)
ax.spines['top'].set_linewidth(bwith)
ax.spines['right'].set_linewidth(bwith)
#axes.xaxis.set_minor_locator( MultipleLocator(0.1) )plt.tick_params(which='both',top=True,bottom='on',left='on',right='on',labelsize=12)
plt.hist(alpha,bins=24,color="w",edgecolor="black",lw=2,alpha=0.8,range=(-8,4))
plt.plot(alpha_x,alpha_y,color="r",lw=2)plt.ylabel("Number of sample",fontsize=15)
plt.xlabel("Some Para X",fontsize=15)
plt.show()

结果图为:


End

拟合函数参数和误差--最小均方根相关推荐

  1. 基于粒子群算法与最小二乘拟合函数参数

    前言 今天更新较晚主要还是学业繁忙,学习素材也不是很好找,可能很多同学们都在做数学建模以及应用统计时都会涉及到函数参数拟合的问题,一般最常用的方法是最小二乘法,但是当函数参数很多时,往往去普通最小二乘 ...

  2. matlab三参数拟合函数,数据拟合,有三个参数,提示拟合参数太多,谢谢您啦!...

    出现的问题:提示拟合参数太多.请您指导,谢谢您啦! 自定义拟合函数:y = k/(1-(x/v)^m); 自变量:x; 因变量:y; 需拟合求的参数:k, v, m; 初始值分别为:0.6, 400, ...

  3. fitype拟合多参数函数和遗传算法拟合多参数函数

    多参数拟合函数最重要的是初始点.初始点的选择可以靠直觉和经验,也可以通过遗传算法从大范围逐步的逼近. 基本语法如下: 这是函数:z=a*(x^b)*(y^c)的函数的拟合.x,y是自变量,z是应变量, ...

  4. 差分隐私 机器学习_满足差分隐私的经验误差最小化方法

    手上的东西有点进行不下去,滚过来写专栏作下回顾.上次聊了聊差分隐私的定义,那么现在我们要在差分隐私的框架上实现机器学习任务. 关于差分隐私机器学习这个方向,Kamalika Chaudhuri 在ni ...

  5. python拟合函数_Python-最小二乘法曲线拟合

    行文思路:最小二乘法原理介绍 利用 leastsq() 函数进行最小二乘法拟合 拟合注意事项 利用curve_fit 进行最小二乘法拟合 总结: 参考文献 实现代码 一,最小二乘法拟合 最小二乘法是一 ...

  6. TensorFlow卷积网络常用函数参数详细总结

    卷积操作 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name参数用以指定该操作 ...

  7. opencv--轮廓拟合函数 boundingRect(),minAreaRect(),minEnclosingCircle(),fitEllipse(),fitLine()

    目录 1.cv2.boundingRect() 2.cv2.minAreaRect() 3. cv2.minEnclosingCircle() 4.cv2.fitEllipse() 5.cv2.fit ...

  8. 神经网络拟合函数表达式,神经网络拟合效果不好

    神经网络,什么过拟合?,什么是欠拟合? 欠拟合是指模型不能在训练集上获得足够低的误差.而过拟合是指训练误差和测试误差之间的差距太大.考虑过多,超出自变量的一般含义维度,过多考虑噪声,会造成过拟合. 可 ...

  9. matlab 拟合函数,MATLAB的拟合函数和工具

    一元函数拟合可用cftool工具箱, 对于一元多项式拟合也可用polyfit() 多元线性函数y=ax的拟合函数regress() 语法是: [a, aint]=regress(y,x,alpha) ...

最新文章

  1. Javaweb-----HTTP协议
  2. 7_23 day26 14min面向对象总结
  3. 10亿+文件数压测,阿里云JindoFS轻松应对
  4. adb命令从手机端复制数据库文件到PC
  5. ae导出html,AE导出json格式的Web动画工具 Bodymovin v5.6.1 + 使用教程
  6. android修改HOLO对话框风格
  7. 2021年茶艺师(中级)复审考试及茶艺师(中级)模拟考试题
  8. ZooKeeper系列:Leader选举
  9. 用户画像标签体系及实现方法
  10. 移动云,中国移动算力网络棋局中的关键一子
  11. 【Python】:数据可视化之相关系数热力图绘制(二)(seaborn版本)
  12. 高清视音监控系统的实现
  13. 在Typora路上愈走愈远,几乎涵盖所有入门攻略和常见问题以及typora继续探索~
  14. 药品研发--检验记录与检验报告书的书写细则
  15. 三星打印机通过无线网连接到服务器,多种连接方式 三星无线打印轻松享
  16. pacemaker和keepalived的区别
  17. 观后感《没事别看哲学书!》
  18. 更新Win11后感觉有点卡顿怎么回事
  19. 数字IC设计工程师笔试面试经典100题-有答案
  20. 记录一个多表查询的问题 #1093 - You can‘t specify target table ‘xxx‘ for update in FROM clause

热门文章

  1. 来自山西机器人乐队_中国风机器人乐队 这到底是个什么梗?
  2. setAttribute()和setProperty()
  3. Android模仿微信UI界面
  4. UVA 496 - Simply Subsets
  5. uboot成功移植到STM32F103ZET6(一)
  6. 必应发狂了! LeCun马库斯齐喷ChatGPT:大语言模型果然是邪路?
  7. python之定制个性化的邮件格式方法
  8. java containsany_Java contains用法示例
  9. 宽带,梦想走向现实?
  10. 程序猿需要深入学习的基础课程