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之通过Python连接数据库
Oct 28 Python
python开发之函数定义实例分析
Nov 12 Python
老生常谈Python基础之字符编码
Jun 14 Python
实例讲解python中的协程
Oct 08 Python
对python指数、幂数拟合curve_fit详解
Dec 29 Python
Django框架配置mysql数据库实现过程
Apr 22 Python
简述 Python 的类和对象
Aug 21 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
弄清Pytorch显存的分配机制
Dec 10 Python
Pytorch 使用tensor特定条件判断索引
Apr 08 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函数
2006/12/06 PHP
用缓存实现静态页面的测试
2006/12/06 PHP
PHP入门学习笔记之一
2010/10/12 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
js密码强度检测
2016/01/07 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python数据类型详解(一)字符串
2016/05/08 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python函数生成器原理及使用详解
2020/03/12 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
python speech模块的使用方法
2020/09/09 Python
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
高中毕业生自我鉴定范文
2013/09/26 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书