使用Python拟合函数曲线


Posted in Python onApril 14, 2022

使用Python拟合函数曲线需要用到一些第三方库:

  • numpy:科学计算的基础库(例如:矩阵)
  • matplotlib:绘图库
  • scipy:科学计算库

如果没有安装过这些库,需要在命令行中输入下列代码进行安装:

pip install numpy matplotlib scipy

拟合多项式

'''
Author: CloudSir
Date: 2021-08-01 13:40:50
LastEditTime: 2021-08-02 09:41:54
LastEditors: CloudSir
Description: Python拟合多项式
https://github.com/cloudsir
'''
import matplotlib.pyplot as plt
import numpy as np
 
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [2.83, 9.53, 14.52, 21.57, 38.26, 53.92, 73.15, 101.56, 129.54, 169.75, 207.59]
z1 = np.polyfit(x, y, 3) #用3次多项式拟合,输出系数从高到0
p1 = np.poly1d(z1) #使用次数合成多项式
y_pre = p1(x)
 
plt.plot(x,y,'.')
plt.plot(x,y_pre)
plt.show()

使用Python拟合函数曲线

函数说明

np.polyfit(x, y, n)

功能:拟合曲线

参数:

  • x,y:x和y的原始数据
  • n:要拟合的次数

返回值:

  • 一个列表,拟合出的系数,顺序为从高到底

例: n=3时,会利用
a x 3 + b x 2 + c x + d 
拟合函数,并返回拟合出的系数 [a, b, c, d]​​​​

np.poly1d(li, r=False)

功能:生成多项式函数

参数:

li:

当没有r参数或 r=False 时,传入一个系数列表(次数从高到低),利用该列表生成多项式函数并返回

import numpy as np

f = np.poly1d([2, 3, 4])

“”" f ( x ) = 2 x 2 + 3 x + 4
"""

print(f(2)) # 18

当参数 r=True 时,传入一个根列表,利用该列表生成多项式函数并返回

import numpy as np

f = np.poly1d([2, 3, 4], True)

“”“ f ( x ) = ( x − 2 ) ∗ ( x − 3 ) ∗ ( x − 4 )
”""

print(f(0)) # -24

返回值:

见上

拟合任意函数

'''
Author: CloudSir
Date: 2021-08-03 15:01:17
LastEditTime: 2021-08-03 15:26:05
LastEditors: CloudSir
Description: Python拟合任意函数
https://github.com/cloudsir
'''
# 引用库函数

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize as op

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号

# 需要拟合的函数
def f_1(x, A, B, C):
    return A * x**2 + B * x + C

# 需要拟合的数据组
x_group = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_group = [2.83, 9.53, 14.52, 21.57, 38.26, 53.92, 73.15, 101.56, 129.54, 169.75, 207.59]

# 得到返回的A,B值
A, B, C = op.curve_fit(f_1, x_group, y_group)[0]

# 数据点与原先的进行画图比较
plt.scatter(x_group, y_group, marker='o',label='真实值')
x = np.arange(0, 15, 0.01)
y = A * x**2 + B *x + C
plt.plot(x, y,color='red',label='拟合曲线')
plt.legend() # 显示label

plt.show()

使用Python拟合函数曲线

函数说明

op.curve_fit(f, x, y)

功能:拟合任意函数

参数:

f:要拟合的函数类型

# 构建一个二次函数
def f(x, A, B, C):
    return A * x**2 + B * x + C

op.curve_fit(f, x, y) # 进行拟合

x, y:x和y的原始数据

返回值:一个元组 (popt,pcov)

  • popt是一个一维数组,表示得到的拟合方程的参数。
  • pcov是一个二维数组,是在popt参数下得到的协方差。

总结

到此这篇关于如何利用Python拟合函数曲线的文章就介绍到这了!

Python 相关文章推荐
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python循环语句中else的用法总结
Sep 11 Python
python生成excel的实例代码
Nov 08 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
Python使用分布式锁的代码演示示例
Jul 30 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
python元组和字典的内建函数实例详解
Oct 22 Python
python循环输出三角形图案的例子
Nov 22 Python
Python 从attribute到property详解
Mar 05 Python
python 轮询执行某函数的2种方式
May 03 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
python中 .npy文件的读写操作实例
Apr 14 #Python
Python Matplotlib绘制等高线图与渐变色扇形图
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 #Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
Apr 14 #Python
Python中time标准库的使用教程
Apr 13 #Python
You might like
PHP对象Object的概念 介绍
2012/06/14 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
菜鸟javascript基础资料整理2
2010/12/06 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python字符串,数值计算
2016/10/05 Python
python多进程和多线程究竟谁更快(详解)
2017/05/29 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
python 递归相关知识总结
2021/03/03 Python
MySQL面试题
2014/01/12 面试题
个人优缺点自我评价
2014/01/27 职场文书
总经理司机职责
2014/02/02 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
小学见习报告
2015/06/23 职场文书