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多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
21行Python代码实现拼写检查器
Jan 25 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
Python 从相对路径下import的方法
Dec 04 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 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
德生S2000电路分析
2021/03/02 无线电
PHP概率计算函数汇总
2015/09/13 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
vue观察模式浅析
2018/09/25 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
Python队列的定义与使用方法示例
2017/06/24 Python
python删除字符串中指定字符的方法
2018/08/13 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
Django的性能优化实现解析
2019/07/30 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
自我鉴定范文
2013/11/10 职场文书
企业理念标语
2014/06/09 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
小学生红领巾广播稿
2015/08/19 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
导游词书写之黄山
2019/08/06 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
详解python的异常捕获
2022/03/03 Python