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 开发Activex组件方法
Nov 08 Python
Python如何实现守护进程的方法示例
Feb 08 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Django+Ajax+jQuery实现网页动态更新的实例
May 28 Python
opencv python 图像去噪的实现方法
Aug 31 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
python多线程http压力测试脚本
Jun 25 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
IDLE下Python文件编辑和运行操作
Apr 25 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 ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JavaScript实现网页截图功能
2014/10/16 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
vue prop传值类型检验方式
2020/07/30 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
详解python和matlab的优势与区别
2019/06/28 Python
python gdal安装与简单使用
2019/08/01 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
python 读取、写入txt文件的示例
2020/09/27 Python
Python LMDB库的使用示例
2021/02/14 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
党员批评与自我批评总结
2014/10/15 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL