需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,

所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。

python的scipy.optimize包里的curve_fit函数来拟合曲线,当然还可以拟合很多类型的曲线。scipy.optimize提供了函数最小值(标量或多维)、曲线拟合和寻找等式的根的有用算法。

  1. import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
    import math
    #单个高斯模型,如果曲线有多个波峰,可以分段拟合
  1. def func(x, a,u, sig):
    return a*np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (sig * math.sqrt(2 * math.pi))
    #混合高斯模型,多个高斯函数相加
  1. def func3(x, a1, a2, a3, m1, m2, m3, s1, s2, s3):
    return a1 * np.exp(-((x - m1) / s1) ** 2) + a2 * np.exp(-((x - m2) / s2) ** 2) + a3 * np.exp(-((x - m3) / s3) ** 2)
  2.  
  3. #正弦函数拟合
  1. #def fmax(x,a,b,c):
  2. # return a*np.sin(x*np.pi/6+b)+c
  3. #fita,fitb=optimize.curve_fit(fmax,x,ymax,[1,1,1])
    #非线性最小二乘法拟合
    #def func(x, a, b,c):
    #    return a*np.sqrt(x)*(b*np.square(x)+c)
    #用3次多项式拟合,可推广到n次多项式,数学上可以证明,任意函数都可以表示为多项式形式
    #f1 = np.polyfit(x, y, 3)
    #p1 = np.poly1d(f1)
    #yvals = p1(x)  #拟合y值
    #也可使用yvals=np.polyval(f1, x)
  4.  
  5. 拟合,并对参数进行限制,bounds里面代表参数上下限,p0是初始范围,默认是[1,1,1]
  1. x=np.arange(1,206,1)
  1. num = []<-自己的y
  1. numhunt = []<-自己的y
  1. y = np.array(num)
  1. yhunt = np.array(numhunt)
  1. popt, pcov = curve_fit(func3, x, y)
  1. popthunt, pcovhunt = curve_fit(func, x, yhunt,p0=[2,2,2])
  1. ahunt = popthunt[0]
    uhunt = popthunt[1]
    sighunt = popthunt[2]
  1. a1 = popt[0]
    u1 = popt[1]
    sig1 = popt[2]
    a2 = popt[3]
    u2 = popt[4]
    sig2 = popt[5]
    a3 = popt[6]
    u3 = popt[7]
    sig3 = popt[8]
  1. yvals = func3(x,a1,u1,sig1,a2,u2,sig2,a3,u3,sig3) #拟合y值
    yhuntvals = func(x,ahunt,uhunt,sighunt) #拟合y值
  1. print(u'系数ahunt:', ahunt)
    print(u'系数uhunt:', uhunt)
    print(u'系数sighunt:', sighunt)
  1. #绘图
    plot1 = plt.plot(x, y, 's',label='insect original values')
    plot2 = plt.plot(x, yvals, 'r',label='insect polyfit values')
    plot3 = plt.plot(x, yhunt, 's',label='predator original values')
    plot4 = plt.plot(x, yhuntvals, 'g',label='predator polyfit values')
  1. plt.xlabel('date')
    plt.ylabel('Nightly catches log10(N+1)')
    plt.legend(loc=4) #指定legend的位置右下角
    plt.title('insect/predator')
    plt.show()
  1. 下图是单个和多个高斯拟合图像

  1.  
  2. 下图是多项式拟合图像

  1. 图例的位置可以自定义设置

lower left
upper center
lower right
center
upper left
center left
upper right
lower center
best
center right
right

python 拟合曲线并求参的更多相关文章

  1. Python中的传参是传值还是传址?

    传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...

  2. python入门:求1-2+3-4+5...99的所有数的和

    #!/usr/bin/env python # -*- coding:utf-8 -*- #求1-2+3-4+5...99的所有数的和 """ 给start赋值为1,su ...

  3. python 2 控制台传参,解包,编码问题初探

    python 2 控制台传参,需要从sys模块中导入argv,argv返回的第一个参数当前脚本(script)的文件名,后面是参数,参数个数必须和解包(unpack)时使用的参数个数一致 1.本例子演 ...

  4. Python菜鸟之传参

    Python菜鸟之传参 : 看上面enroll( )函数的调用传参 enroll("twiggy","M",city="上海", age=2 ...

  5. Python函数07/有参装饰器/多个装饰器装饰一个函数

    Python函数07/有参装饰器/多个装饰器装饰一个函数 目录 Python函数07/有参装饰器/多个装饰器装饰一个函数 内容大纲 1.有参装饰器 2.多个装饰器装饰一个函数 3.今日总结 3.今日练 ...

  6. 让计算机崩溃的python代码,求共同分析

    在现在的异常机制处理的比较完善的编码系统里面,让计算机完全崩溃无法操作的代码还是不多的.今天就无意运行到这段python代码,运行完,计算机直接崩溃,任务管理器都无法调用,任何键都用不了,只能强行电源 ...

  7. 【原】Gradle调用shell脚本和python脚本并传参

    最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...

  8. 广师大python学习笔记求派的值

    用python语言算π值并且带有进度条 用python算圆周率π 1.准备第三方库pip 2.利用马青公式求π 3.用python语言编写出求圆周率到任意位的程序如下: from math impor ...

  9. R和python语言如何求平均值,中位数和众数

    均值是通过取数值的总和并除以数据序列中的值的数量来计算. R语言平均值公式: mean(x, trim = 0, na.rm = FALSE, ...)#x - 是输入向量.trim - 用于从排序的 ...

随机推荐

  1. electron之打包成安装程序

    1.安装electron-winstaller npm install --save-dev electron-winstaller 2.创建一个build.js var electronInstal ...

  2. 《maven实战》笔记(1)----maven的初识

    刚入职公司用maven进行项目管理,于是昨天下午开始看<maven实战>的pdf,感觉很好,作者写的很有条理. 下面是笔记,看书做笔记还是很有必要的,加强自己的总结. 什么是maven? ...

  3. Oracle 的 oracle 数据库分类

    一.数据库分类 1.小型数据库:access.foxbase 2.中型数据库:informix.sql server.mysql 3.大型数据库:sybase.db2.oracle 二.项目中如何合理 ...

  4. 在CSS中定义【导航栏】超链接样式

    1.案例css代码 <style> .divcss5 a:link{ color:#F00}/* 链接默认为红色 */ .divcss5 a:hover{ color:#000}/* 鼠标 ...

  5. Python xlwt 模块执行出错Exception: String longer than 32767 characters

    使用Python搜集数据时用到xlwt保存到excel文件,但是数据量有点大时出现 Exception: String longer than 32767 characters 搜索类似的问题都是建议 ...

  6. vue+大文件断点续传

    根据部门的业务需求,需要在网络状态不良的情况下上传很大的文件(1G+).其中会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长,请求超时:3,传输中断,必须重新上传导致前功尽弃.解 ...

  7. 生命周期和Zend引擎

    一切的开始:SAPI接口 SAPI(Server Application Programming Interface)指的是具体应用的编程接口.PHP脚本要执行有很多种方式,通过web服务器,或者直接 ...

  8. php自定义错误处理函数

    function myErrorHandler($errno, $errstr, $errfile, $errline) { echo "<b>Custom error:< ...

  9. C# 实现启用或停止本地网络连接

    获取本机网络连接列表 public static List<string> GetNetList() { List<string> ls = new List<strin ...

  10. Unity3d 烘培lightingmap 注意的2点.

    1.在Qulity里面设置合适的灯光数量.否则,你会发现烘培出来的场景,有些灯光没有起作用. 2.在导入模型时候,注意勾选:Generate Lightingmap .  否则,模型没办法烘培. 3. ...