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根据日期返回星期几的方法
Jul 06 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
用Python解决计数原理问题的方法
Aug 04 Python
python 中random模块的常用方法总结
Jul 08 Python
python文件特定行插入和替换实例详解
Jul 12 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
解读python logging模块的使用方法
Apr 17 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
Python grpc超时机制代码示例
Sep 14 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
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
js实现双色球效果
2020/08/02 Javascript
解决vue项目input输入框双向绑定数据不实时生效问题
2020/08/05 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
python 正则表达式 概述及常用字符
2009/05/04 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
Python中super函数的用法
2017/11/17 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
css3通过scale()、rotate()实现放大、旋转
2020/03/19 HTML / CSS
人力资源作业细则
2014/03/03 职场文书
中式结婚主持词
2014/03/14 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
白莲教口号
2014/06/18 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
离婚协议书范文
2015/01/26 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
离婚民事起诉状
2015/08/03 职场文书
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python
Nginx安装配置详解
2022/06/25 Servers