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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
说一说Python logging
Apr 15 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
Apr 19 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
python实现简单的单变量线性回归方法
Nov 08 Python
Linux下远程连接Jupyter+pyspark部署教程
Jun 21 Python
python 杀死自身进程的实现方法
Jul 01 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
Tkinter中复选菜单是否被选中的判断与设置方式
Mar 04 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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获取文件相对路径的方法
2015/02/26 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
2016/09/21 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
详解vue-resource promise兼容性问题
2017/06/20 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
jQuery事件委托代码实践详解
2019/06/21 jQuery
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
Python实现CET查分的方法
2015/03/10 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
python基于pyDes库实现des加密的方法
2017/04/29 Python
详解Python自建logging模块
2018/01/29 Python
python 使用pandas计算累积求和的方法
2019/02/08 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
python实现图像拼接功能
2020/03/23 Python
Pycharm中如何关掉python console
2020/10/27 Python
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
四风问题自查报告剖析材料
2014/02/08 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
小学生学习保证书
2015/02/26 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle
redis lua限流算法实现示例
2022/07/15 Redis