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程序的执行原理
Apr 11 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
python变量的存储原理详解
Jul 10 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
Python建造者模式案例运行原理解析
Jun 29 Python
如何在python中判断变量的类型
Jul 29 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 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 使用post,get的一种简洁方式
2010/04/25 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
js选择器全面解析
2016/06/27 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
python 常见的排序算法实现汇总
2020/08/21 Python
Python函数调用追踪实现代码
2020/11/27 Python
Tod’s英国官方网站:意大利奢华手工制作手袋和鞋履
2019/03/15 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
一套带网友答案的.NET笔试题
2016/12/06 面试题
校园奶茶店创业计划书
2014/01/23 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
面试自我评价范文
2014/09/17 职场文书
健康状况证明模板
2014/10/23 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
Django实现聊天机器人
2021/05/31 Python
win10更新失败无限重启解决方法
2022/04/19 数码科技