python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案


Posted in Python onFebruary 18, 2020

第一种是进行多项式拟合,数学上可以证明,任意函数都可以表示为多项式形式。具体示例如下。
###拟合年龄

import numpy as np
import matplotlib.pyplot as plt
 
#定义x、y散点坐标
x = [10,20,30,40,50,60,70,80]
x = np.array(x)
print('x is :\n',x)
num = [174,236,305,334,349,351,342,323]
y = np.array(num)
print('y is :\n',y)
#用3次多项式拟合
f1 = np.polyfit(x, y, 3)
print('f1 is :\n',f1)
 
p1 = np.poly1d(f1)
print('p1 is :\n',p1)
 
#也可使用yvals=np.polyval(f1, x)
yvals = p1(x) #拟合y值
print('yvals is :\n',yvals)
#绘图
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('polyfitting')
plt.show()

python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案

2 。 第一种方案是给出具体的函数形式(可以是任意的,只要你能写的出来 下面的func就是),用最小二乘的方式去逼近和拟合,求出函数的各项系数,如下。

##使用curve_fit

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
 
#自定义函数 e指数形式
def func(x, a, b,c):
 return a*np.sqrt(x)*(b*np.square(x)+c)
 
#定义x、y散点坐标
x = [20,30,40,50,60,70]
x = np.array(x)
num = [453,482,503,508,498,479]
y = np.array(num)
 
#非线性最小二乘法拟合
popt, pcov = curve_fit(func, x, y)
#获取popt里面是拟合系数
print(popt)
a = popt[0] 
b = popt[1]
c = popt[2]
yvals = func(x,a,b,c) #拟合y值
print('popt:', popt)
print('系数a:', a)
print('系数b:', b)
print('系数c:', c)
print('系数pcov:', pcov)
print('系数yvals:', yvals)
#绘图
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('curve_fit')
plt.show()

python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案

拟合高斯分布的方法。

#encoding=utf-8 
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pandas as pd
#自定义函数 e指数形式
def func(x, a,u, sig):
 return a*(np.exp(-(x - u) ** 2 /(2* sig **2))/(math.sqrt(2*math.pi)*sig))*(431+(4750/x))
#定义x、y散点坐标
x = [40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135]
x=np.array(x)
# x = np.array(range(20))
print('x is :\n',x)
num = [536,529,522,516,511,506,502,498,494,490,487,484,481,478,475,472,470,467,465,463]
y = np.array(num)
print('y is :\n',y)
popt, pcov = curve_fit(func, x, y,p0=[3.1,4.2,3.3])
#获取popt里面是拟合系数
a = popt[0]
u = popt[1]
sig = popt[2]
yvals = func(x,a,u,sig) #拟合y值
print(u'系数a:', a)
print(u'系数u:', u)
print(u'系数sig:', sig)
#绘图
plot1 = plt.plot(x, y, 's',label='original values')
plot2 = plt.plot(x, yvals, 'r',label='polyfit values')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('curve_fit')
plt.show()

总结

以上所述是小编给大家介绍的python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案,希望对大家有所帮助,也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python实现发送email的几种常用方法
Aug 18 Python
Python写入CSV文件的方法
Jul 08 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
使用Django和Python创建Json response的方法
Mar 26 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
Python enumerate函数功能与用法示例
Mar 01 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python调用Windows命令打印文件
Feb 07 Python
Python requests设置代理的方法步骤
Feb 23 Python
python scrapy简单模拟登录的代码分析
Jul 21 Python
Python识别html主要文本框过程解析
Feb 18 #Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 #Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 #Python
tensorflow 分类损失函数使用小记
Feb 18 #Python
python如何把字符串类型list转换成list
Feb 18 #Python
python计算波峰波谷值的方法(极值点)
Feb 18 #Python
Python表达式的优先级详解
Feb 18 #Python
You might like
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
微信小程序实现弹出菜单功能
2018/06/12 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
利用python获取某年中每个月的第一天和最后一天
2016/12/15 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
美国精油公司:Plant Therapy
2019/05/17 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
Linux文件系统类型
2012/09/16 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
精彩的大学生自我评价
2013/11/17 职场文书
文字自荐书范文
2014/02/10 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
婚宴祝酒词大全
2015/08/10 职场文书