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读写Excel文件方法介绍
Nov 22 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
独特的python循环语句
Nov 20 Python
Python整型运算之布尔型、标准整型、长整型操作示例
Jul 21 Python
儿童编程python入门
May 08 Python
python 每天如何定时启动爬虫任务(实现方法分享)
May 21 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
Python并发:多线程与多进程的详解
Jan 24 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python如何生成xml文件
Jun 04 Python
python开发入门——列表生成式
Sep 03 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 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之生成GIF动画的实现方法
2013/06/07 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
php封装的验证码类分享
2017/02/26 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
js文字滚动停顿效果代码
2008/06/28 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
简述vue状态管理模式之vuex
2018/08/29 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
Python函数式编程
2017/07/20 Python
用Python逐行分析文件方法
2019/01/28 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
2020/10/27 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
如何写出高性能的JSP和Servlet
2013/01/22 面试题
英语专业个人求职信范文
2014/02/01 职场文书
勤俭节约倡议书
2014/04/14 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书
请假条应该怎么写?
2019/06/24 职场文书
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python