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基础教程之基本内置数据类型介绍
Feb 20 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python之从文件读取数据到list的实例讲解
Apr 19 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
使用npy转image图像并保存的实例
Jul 01 Python
matplotlib 多个图像共用一个colorbar的实现示例
Sep 10 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
Python字典实现伪切片功能
Oct 28 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
PHP 第一节 php简介
2012/04/28 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
JavaScript中this详解
2015/09/01 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
[04:32]DOTA2著名解说配音敌法师 现场专访海涛怒切假腿
2013/12/20 DOTA
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
python最长回文串算法
2018/06/04 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
马来西亚奢侈品牌购物商城:Valiram 247
2020/09/29 全球购物
网络安全方面的面试题
2015/11/04 面试题
旅游管理本科生求职信
2013/10/14 职场文书
高三地理教学反思
2014/01/11 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
保护环境倡议书500字
2014/05/19 职场文书
政府法律服务方案
2014/06/14 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
五四青年节活动总结
2015/02/10 职场文书
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android