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

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

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

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
#单个高斯模型,如果曲线有多个波峰,可以分段拟合
def func(x, a,u, sig):
return a*np.exp(-(x - u) ** 2 / (2 * sig ** 2)) / (sig * math.sqrt(2 * math.pi))
#混合高斯模型,多个高斯函数相加
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) #正弦函数拟合
#def fmax(x,a,b,c):
# return a*np.sin(x*np.pi/6+b)+c
#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) 拟合,并对参数进行限制,bounds里面代表参数上下限,p0是初始范围,默认是[1,1,1]
x=np.arange(1,206,1)
num = []<-自己的y值
numhunt = []<-自己的y值
y = np.array(num)
yhunt = np.array(numhunt)
popt, pcov = curve_fit(func3, x, y)
popthunt, pcovhunt = curve_fit(func, x, yhunt,p0=[2,2,2]) 
ahunt = popthunt[0]
uhunt = popthunt[1]
sighunt = popthunt[2]
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]
yvals = func3(x,a1,u1,sig1,a2,u2,sig2,a3,u3,sig3) #拟合y值
yhuntvals = func(x,ahunt,uhunt,sighunt) #拟合y值
print(u'系数ahunt:', ahunt)
print(u'系数uhunt:', uhunt)
print(u'系数sighunt:', sighunt)
#绘图
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')
plt.xlabel('date')
plt.ylabel('Nightly catches log10(N+1)')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('insect/predator')
plt.show()
下图是单个和多个高斯拟合图像


下图是多项式拟合图像

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

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

最新文章

  1. thinkphp标签
  2. JS实现的简单横向伸展二级菜单
  3. Windows 10 技术预览
  4. Cordova4.0 系列 -- 基本环境搭建(1)
  5. oj 1031 random permutation
  6. Zend Debugger 配置
  7. 走出测试,走向CEO
  8. Oracle- 日期加减
  9. mysql5.7.17安装问题
  10. 在DFS和BFS中一般情况可以不用vis[][]数组标记
  11. Dev的WPF控件与VS2012不兼容问题
  12. elasticsearch-5.2在windows下的安装方法
  13. [Android]Android焦点流程代码分析
  14. osi参考模型(开放系统互连参考模型)
  15. NetBeans使用Consolas中文乱码的解决
  16. 现代编译原理--第六章(中间树 IR Tree 含源码)
  17. 【转】位置式、增量式PID算法C语言实现
  18. Java常用API、Math类介绍
  19. C++复习:C++的类型转换
  20. tp5框架成功、失败提示模板修改

热门文章

  1. Visual Studio Code(VS Code)命令行的使用(1)
  2. android: Android 权限管理小结
  3. vue+webpack 实现懒加载的三种方式
  4. vue2.0+vue-video-player实现hls播放的案例
  5. 虚拟化技术实现 — QEMU-KVM
  6. 机器阅读理解综述Neural Machine Reading Comprehension Methods and Trends(略读笔记)
  7. delphi DBTreeview与数据库连接的数据存取
  8. 动手生成 Delphi xe DBTreeview 三级行政图树 省市县
  9. python中dict对象和字符串string对象互相转换
  10. @vue/cli3中解决Elint中console.log报错的问题