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不带重复的全排列代码
Aug 13 Python
Python获取apk文件URL地址实例
Nov 01 Python
python中threading超线程用法实例分析
May 16 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
浅谈Python中的模块
Jun 10 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
python如何用matplotlib创建三维图表
Jan 26 Python
python爬取某网站原图作为壁纸
Jun 02 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
Syphon 秘笈
2021/03/03 冲泡冲煮
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python中实现定制类的特殊方法总结
2014/09/28 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
浅谈python数据类型及类型转换
2017/12/18 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
办公室副主任岗位职责
2013/11/25 职场文书
十八大闭幕感言
2014/01/22 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
大学生暑期实践感言
2014/02/26 职场文书
公司离职证明范本
2014/10/17 职场文书
干部年终考核评语
2015/01/04 职场文书
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android
python创建字典及相关管理操作
2022/04/13 Python