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实现简单温度转换的方法
Mar 13 Python
简介Django中内置的一些中间件
Jul 24 Python
JSON Web Tokens的实现原理
Apr 02 Python
TensorFlow实现创建分类器
Feb 06 Python
Flask框架配置与调试操作示例
Jul 23 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
Python Lambda函数使用总结详解
Dec 11 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python实现图片素描效果
Sep 26 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 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模板技术原理【一】
2008/01/10 PHP
php 日期时间处理函数小结
2009/12/18 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
PHP简单实现防止SQL注入的方法
2018/03/13 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
python开发之str.format()用法实例分析
2016/02/22 Python
Python文件处理
2016/02/29 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
社团活动总结报告
2014/06/27 职场文书
暑期培训班策划方案
2014/08/26 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
2015年党建工作总结
2015/03/30 职场文书
个人求职意向书
2015/05/11 职场文书
2015年中秋寄语
2015/07/31 职场文书
MySQL系列之一 MariaDB-server安装
2021/07/02 MySQL
详解nginx location指令
2022/01/18 Servers
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript