Python做曲线拟合(一元多项式拟合及任意函数拟合)

news2024/12/30 0:53:10

目录

1. 一元多项式拟合

使用方法 np.polyfit(x, y, deg)

2. 任意函数拟合

使用 curve_fit() 方法

实例:

(1)初始化 x 和 y 数据集

(2)建立自定义函数

(3)使用自定义的函数生成拟合函数绘图 


1. 一元多项式拟合

使用方法 np.polyfit(x, y, deg)

polyfig 使用的是最小二乘法,用于拟合一元多项式函数。

参数说明: x 就是x坐标,y 就是y坐标,deg 为拟合多项式的次数

实例:

根据 ti yi 两个列表来得到 一元二次多项式拟合函数 (deg为2)

import matplotlib.pyplot as plt
import numpy as np
import pylab as mpl
ti = [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8]
yi = [33.40, 79.50, 122.65, 159.05, 189.15, 214.15, 238.65, 252.2, 267.55, 280.50, 296.65, 301.65, 310.4, 318.15, 325.15]

z1 = np.polyfit(ti, yi, 2)
print(z1)

输出结果:

分别是二次多项式的 3 个系数,y = ax^2 + bx + c

 

2. 任意函数拟合

使用 curve_fit() 方法

curve_fit() 使用是非线性最小二乘法将函数进行拟合,适用范围:多元、任意函数

scipy.optimize.curve_fit(f,xdata,ydata,p0 = None)

常用参数说明:

f: 模型函数f(x,…)。它必须将自变量作为第一个参数,其余你需要求的参数都放后面
xdata: 数组对象,测量数据的自变量。
ydata: 数组对象,因变量。
p0:参数的初始猜测(长度 N),如果为None,则初始值为1(如果可以使用自省来确定函数的参数数量,否则会引发 ValueError)。

 返回值:

popt: 数组,参数的最佳值,以使的平方残差之和最小。f(xdata, *popt) - ydata
pcov: 二维阵列,popt的估计协方差。对角线提供参数估计的方差。

实例:

(1)初始化 x 和 y 数据集

x 为 0~19(包括0和19),y=2x^2 + (二十个0~100范围内的随机数

import numpy as np
x = np.arange(0,20)
y = 2 * x ** 2 + np.random.randint(0, 100, 20)

#z = 2 * x ** 2 + np.random.randint(0, 100, (1,20))[0]

如图为生成 x 列表和 y 列表的值(具有随机性):

 

 

 补充一下 np.random.randint()用法:

numpy.random.randint(low, high=None, size=None, dtype=int)

参数说明:

1. low: int 生成的数值的最小值(包含),默认为0,可省略。
2. high: int 生成的数值的最大值(不包含)
3. size: int or tuple of ints 随机数的尺寸, 默认是返回单个,输入 20 返回 20个,输入 (3,4) 返回的是一个 3*4 的二维数组。(可选)。
4. dtype:想要输出的结果类型。默认值为int。(可选,一般用不上)。

(2)建立自定义函数

 定义函数  y=ax^2

#变量一定要放在第一个位置
def func(x, a):
    return a*x**2

popt, pcov = curve_fit(func, x, y, p0=1) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)

输出结果:

 定义函数 y=2x^2+bx+c

#变量一定要放在第一个位置
def func(x, a, b, c):
    return a*x**2 + b*x + c

popt, pcov = curve_fit(func, x, y) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)

输出结果:

(3)使用自定义的函数生成拟合函数绘图 

对第二个拟合函数绘图:

完整代码:

注意:在画图是可能会出现坐标中文乱码的问题,需要加入以下几行:

import pylab as mpl

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文不显示问题 plt.rcParams['axes.unicode_minus']=False  #解决负数坐标显示问题

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pylab as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文不显示问题
plt.rcParams['axes.unicode_minus']=False       #解决负数坐标显示问题

x = np.arange(0,20)
y = 2 * x ** 2 + np.random.randint(0, 100, 20)
z = 2 * x ** 2 + np.random.randint(0, 100, (1,20))[0]
print(x)
print(y)

#变量一定要放在第一个位置
def func(x, a, b, c):
    return a*x**2 + b*x + c

popt, pcov = curve_fit(func, x, y) #p0 = 1是因为只有a一参数
print(popt) #即参数a的最佳值
print(pcov)
#popt[0],popt[1],popt[2]分别代表参数a b c
y2 = func(x,popt[0],popt[1],popt[2])

plt.scatter(x, y, marker='x',lw=1,label='原始数据')
plt.plot(x,y2,c='r',label='拟合曲线')
plt.legend() # 显示label
plt.show()

运行结果:

 

 


 

 使用指数函数:

y = ae^(bx)

 

绘图效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字滤波算法 在数字信号处理应用中使用微控制器

提示:数字滤波算法 在数字信号处理应用中使用微控制器 文章目录1.介绍1.1. 关键点2. 数字FIR滤波器2.1. 数字滤波器算法2.1.1. IIR滤波器算法2.1.2. FIR滤波器算法2.2. C8051F12x和C8051F36x的FIR算法实现2.2.1. 实施优化2.2.2. FIR滤波器示例2.3. 运行FIR演示2.3.1…

ML.NET 奇异谱分析(SSA Singular spectrum analysis)预测实践

一、奇异谱分析(Singular Spectrum Analysis, SSA) 简介 奇异谱分析(Singular Spectrum Analysis, SSA)是一种处理非线性时间序列数据的方法,通过对所要研究的时间序列的轨迹矩阵进行分解、重构等操作,提取出时间序列中的不同成分序列(长期趋势&#xff…

Linux命令_ps 进程管理

简介 ps通过读取 /proc 中的虚拟文件来工作,不需要 setuid kmem 或有任何特权来运行。 CPU使用率目前表示为进程整个生命周期中运行所花费时间的百分比。这是不理想的,它不符合ps在其他方面所符合的标准。CPU使用率加起来不太可能达到100%。 SIZE和RSS字…

ORB-SLAM2 ---- ORBmatcher::SearchForInitialization函数

目录 1.函数作用 2.执行流程 3.函数参数解析 4.code 5.函数解析 5.1 旋转直方图的构建与作用 5.2 遍历帧1中的特征点在帧2中找出候选匹配特征点 5.3 第一层筛选 -- 阈值、最优/次优比例、重复匹配 5.4 第二层筛选 -- 旋转直方图 5.5 final 将最后通过筛选的匹…

web前端课程设计——动漫网页2个网页HTML+CSS web前端开发技术 web课程设计 网页规划与设计

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

【图】深度优先遍历 广度优先遍历

文章目录一、广度优先遍历二、深度优先遍历深度优先遍历和广度优先遍历是遍历图的两种常见方式,接下来就通过这两种方式来实现一下图具体遍历的过程 当我位于游乐园的景区 A 时,为了玩遍所有的景区我们有两种玩的方式: 方式一: …

HDLbits——移位寄存器

移位寄存器 1 4 位移位寄存器 module top_module(input clk,input areset, // async active-high reset to zeroinput load,input ena,input [3:0] data,output reg [3:0] q); always (posedge clk or posedge areset) beginif (areset)q<4h0;else if(load)q<data;els…

linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本

前言&#xff1a; shell脚本的功能十分强大&#xff0c;这一点毋庸置疑的。那么&#xff0c;平常的工作中总是免不了和脚本打交道&#xff0c;也免不了要自己编写一些脚本。 每个人都希望自己编写的脚本强壮&#xff0c;简单&#xff0c;易用&#xff0c;功能多&#xff0c;并…

CDH中某一结点任务异常,节点服务重启失败报错:No space left on device

文章目录Error Message - 报错信息Analysis Process - 分析思路Solution - 解决方案Error Message - 报错信息 今天发现cdh集群的某一个节点任务爆红了&#xff0c;因为是测试的服务器&#xff0c;一般我都会尝试直接重启&#xff0c;但是该节点服务关闭后&#xff0c;竟然都无…

Spring Web

目录 概述 SpringMVC的组件 DispatcherServlet HandlerMapping HandlerAdapter SpringWeb的运行流程 Controller类的编写 RestController注解 RequestMapping注解 SpringWeb搭建 获取请求参数 解决POST请求中文乱码问题 Ajax返回JSON数据 跨域问题的解决 拦截器 …

LabVIEW与SQL Server 2919 Express通讯

LabVIEW与SQL Server 2919 Express通讯 ​LabVIEW与数据库通讯&#xff0c;可以使用数据库连接工具包。一般小型数据库用Access就可以了。但是对于长时间&#xff0c;需要存储空间较大的场合&#xff0c;Access一般不超过2G。这样就需要更换其他数据了。 SQL Server不同版本存…

MDC Service 基于 ESP32 推出树莓派 4 形态的 EsPiFF

当您的应用在树莓派 4 上运行不够稳定或耗电量过大时&#xff0c;您可以考虑使用 EsPiFF。这是一款由 MDC-Service 基于乐鑫 ESP32 构建的开发板。EsPiFF 配备有线和无线以太网、SD 卡插槽和 RP2040 协处理器。如果您尚未找到适合您项目的树莓派&#xff0c;不妨尝试一下这款低…

使用 Docker 来快速上手中文 Stable Diffusion 模型:太乙

本篇文章&#xff0c;我们聊聊如何使用 Docker 快速运行中文 Stable Diffusion 模型&#xff1a;太乙。 写在前面 上个月的时候&#xff0c;有朋友和我推荐了一个 “Stable Diffusion” 模型&#xff0c;来自深圳大湾区数字经济研究院(IDEA)的封神榜大模型中的 “太乙” 。 最…

web期末大作业 使用HTML+CSS制作蓝色版爱宠之家带留言板(5页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Metal每日分享,4x4颜色矩阵滤镜效果

本案例的目的是理解如何用Metal实现图像4x4颜色矩阵效果滤镜,通过4x4矩阵对RGBA像素处理; Demo HarbethDemo地址实操代码 // 绿色通道加倍 let filter = C7ColorMatrix4x4(matrix: Matrix4x4.Color.greenDouble)// 方案1: ImageView.image = try? BoxxIO(element: originIm…

【Python开发】Flask中的单点登录解决方案

Flask中的单点登录解决方案1.SSO 和 CAS 单点登录&#xff08;Single Sign On&#xff0c;SSO&#xff09;就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后&#xff0c;即可获得访问单点登录系统中其他关联系统和应用软件的权限&#xff0c;同时这种实现…

E. DS哈希查找--Trie树

目录 题目描述 思路分析 AC代码 题目描述 Trie树又称单词查找树&#xff0c;是一种树形结构&#xff0c;如下图所示。 它是一种哈希树的变种。典型应用是用于统计&#xff0c;排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;&#xff0c;所以经常被搜索引擎…

【经验版】Linux相关教程(二)

一、参考资料 二、常用指令 1. 安装run软件包 # 可执行权限 chmod x 软件包名.run# 校验软件包安装文件的一致性和完整性 ./软件包名.run --check# 指定安装路径 ./软件包名.run --install如果用户未指定安装路径&#xff0c;则软件会安装到默认路径下&#xff0c;默认安装路…

kafka一致性保证

1、概念 水位标记&#xff1a; 水位或水印&#xff08;watermark&#xff09;一词&#xff0c;表示位置信息&#xff0c;即位移&#xff08;offset&#xff09;。Kafka源码中使用的名字是高水位&#xff0c;HW&#xff08;high watermark&#xff09;。 副本角色&#xff1a;…

华硕编程竞赛11月JAVA专场 E题太空漫步 题解

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…