python 拟合曲线并求参
需要对数据进行函数拟合,首先画一下二维散点图,目测一下大概的分布,
所谓正态分布,就是高斯分布,正态曲线是一种特殊的高斯曲线。
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
python 拟合曲线并求参的更多相关文章
- Python中的传参是传值还是传址?
传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...
- python入门:求1-2+3-4+5...99的所有数的和
#!/usr/bin/env python # -*- coding:utf-8 -*- #求1-2+3-4+5...99的所有数的和 """ 给start赋值为1,su ...
- python 2 控制台传参,解包,编码问题初探
python 2 控制台传参,需要从sys模块中导入argv,argv返回的第一个参数当前脚本(script)的文件名,后面是参数,参数个数必须和解包(unpack)时使用的参数个数一致 1.本例子演 ...
- Python菜鸟之传参
Python菜鸟之传参 : 看上面enroll( )函数的调用传参 enroll("twiggy","M",city="上海", age=2 ...
- Python函数07/有参装饰器/多个装饰器装饰一个函数
Python函数07/有参装饰器/多个装饰器装饰一个函数 目录 Python函数07/有参装饰器/多个装饰器装饰一个函数 内容大纲 1.有参装饰器 2.多个装饰器装饰一个函数 3.今日总结 3.今日练 ...
- 让计算机崩溃的python代码,求共同分析
在现在的异常机制处理的比较完善的编码系统里面,让计算机完全崩溃无法操作的代码还是不多的.今天就无意运行到这段python代码,运行完,计算机直接崩溃,任务管理器都无法调用,任何键都用不了,只能强行电源 ...
- 【原】Gradle调用shell脚本和python脚本并传参
最近由于项目自动化构建的需要,研究了下gradle调用脚本并传参的用法,在此作个总结. Pre build.gradle中定义了$jenkinsJobName $jenkinsBuild两个Jenki ...
- 广师大python学习笔记求派的值
用python语言算π值并且带有进度条 用python算圆周率π 1.准备第三方库pip 2.利用马青公式求π 3.用python语言编写出求圆周率到任意位的程序如下: from math impor ...
- R和python语言如何求平均值,中位数和众数
均值是通过取数值的总和并除以数据序列中的值的数量来计算. R语言平均值公式: mean(x, trim = 0, na.rm = FALSE, ...)#x - 是输入向量.trim - 用于从排序的 ...
随机推荐
- 笔记三(UEFI详解)
1.SEC 安全验证 SEC(Security Phase)阶段是平台初始化的第一个阶段,计算机系统加电后进入这个阶段. 1)接收并处理系统启动和重启信号:系统加点信号.系统重启信号.系统运行过程中的 ...
- 重读APUE(12)-SIGCHLD与僵尸进程
SIGCHLD信号是当子进程终止时向父进程发送的信号:它的语义如下: 如果进程明确的将该信号设置为SIG_IGN,则调用进程不会产生僵尸进程:这种情况下,wait是等不到给子进程收尸的,所以wait阻 ...
- TNetHttpClient的用法
TNetHttpClient的用法 TNetHttpClient是DELPHI XE8新增加的控件. 在之前,我们一般都是使用IDHTTP控件,但在安卓.IOS等非WINDOWS平台,IDHTTP访问 ...
- kotlin中访问封闭作用内的变量
在java中,匿名对象访问封闭作用域内的变量,需要用final 声明变量在java8中,如果只是使用封闭作用域内的变量,该变量并不需要使用final,但是一旦修改值,就需要使用final 来声明变量. ...
- Servlet的概述
A: Servlet的概述: server applet , 是一个运行在服务器端的小应用程序 B: 就是一个接口,作用: servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web ...
- Java静态方法和实例方法区别详解
静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方 ...
- 深入理解Flink ---- Metrics的内部结构
从Metrics的使用说起 Flink的Metrics种类有四种Counters, Gauges, Histograms和Meters. 如何使用Metrics呢? 以Counter为例, publi ...
- 不要在viewWillDisappear:方法中移除通知
都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用. 这看上去没什么问题,键盘的显示和隐 ...
- RegexBuddy 4.7.0 x64 评估试用到期,无限试用的办法
http://www.cnblogs.com/inrg/p/6491043.html 最后对比发现,在注册表 HKEY_USERS 节点下存在一个用户的项,形如 "S-1-5-21-1609 ...
- 用alert打印js对象
用alert查看对象: function writeObj(obj){ var description = ""; for(var i in obj){ var property= ...