当前位置: 首页 > news >正文

多列传感器数据多项式拟合python脚本

 以下是更新后的代码,其中电压作为自变量,距离作为因变量:

import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt# 定义要拟合的四次多项式函数
def fit_func(x, a, b, c, d, e):return a * x**4 + b * x**3 + c * x**2 + d * x + e# 读取数据
data = pd.read_excel('d:/psd_model/sensor_data.xlsx')# 提取电压列(作为 x 轴)和距离列(作为 y 轴)
voltages = data.iloc[:, :-1].values.flatten()
distances = data.iloc[:, -1].values# 合并电压和距离列
distances = np.repeat(distances, data.shape[1] - 1)# 去除任何 NaN 值
mask = ~np.isnan(voltages) & ~np.isnan(distances)
voltages = voltages[mask]
distances = distances[mask]# 拟合曲线
popt, pcov = curve_fit(fit_func, voltages, distances)# 计算拟合的距离值
fitted_distances = fit_func(voltages, *popt)# 绘制原始数据和拟合曲线
plt.figure()
plt.scatter(voltages, distances, label='Data', s=10)
plt.plot(voltages, fitted_distances, label='Fit: a=%.3f, b=%.3f, c=%.3f, d=%.3f, e=%.3f' % tuple(popt), color='red')
plt.xlabel('Voltage')
plt.ylabel('Distance (mm)')
plt.legend()
plt.show()# 打印拟合参数
print(f'Fitted curve parameters: a={popt[0]:.3f}, b={popt[1]:.3f}, c={popt[2]:.3f}, d={popt[3]:.3f}, e={popt[4]:.3f}')# 计算和绘制残差
residuals = distances - fitted_distances
plt.figure()
plt.scatter(voltages, residuals, label='Residuals', s=10)
plt.axhline(0, color='red', linestyle='--')
plt.xlabel('Voltage')
plt.ylabel('Residuals')
plt.legend()
plt.show()

代码解释

  1. 数据读取和处理:提取电压列(作为 x 轴)和距离列(作为 y 轴),并合并数据。
  2. 数据归一化:对电压和距离数据进行标准化,以提高拟合精度。归一化的选择可以根据需要调整。
  3. 拟合曲线:使用四次多项式对电压和距离数据进行拟合。
  4. 绘制图形:绘制原始数据和拟合曲线,显示电压与距离的关系。
  5. 计算和绘制残差:计算拟合的残差并绘制残差图,检查拟合的质量。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 斯坦福UE4 C++课学习补充 14:UMG-优化血量条
  • spring常用注解有哪些
  • YOLOv5改进 | 注意力机制 | 二阶注意力网络来进行单图像超分辨率【附网盘完整代码】
  • 力扣SQL 最后一个能进入巴士的人 自连接
  • 【爱上C++】list用法详解、模拟实现
  • 放大电路总结
  • electron 网页TodoList工具打包成win桌面应用exe
  • lua 游戏架构 之 游戏 AI (九)ai_mgr Ai管理
  • Matlab M_map工具箱绘制Interrupted Mollweide Projection
  • 【React 】开发环境搭建详细指南
  • Java中的集合相关知识汇总
  • 【Go】探索 Go 语言的内建函数 copy
  • nacos2.x作为配置中心和服务注册和发现以及springcloud使用
  • linux离线安装mysql8(单机版)
  • 信息安全工程师题
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 【5+】跨webview多页面 触发事件(二)
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CSS居中完全指南——构建CSS居中决策树
  • js面向对象
  • KMP算法及优化
  • Median of Two Sorted Arrays
  • Nacos系列:Nacos的Java SDK使用
  • Otto开发初探——微服务依赖管理新利器
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 阿里云前端周刊 - 第 26 期
  • 基于遗传算法的优化问题求解
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 看域名解析域名安全对SEO的影响
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 微信小程序实战练习(仿五洲到家微信版)
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • Nginx实现动静分离
  • 如何在招聘中考核.NET架构师
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Z0458. 树的中心2
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)Jupyter Notebook 下载及安装
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (Git) gitignore基础使用
  • (ros//EnvironmentVariables)ros环境变量
  • (void) (_x == _y)的作用
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • .Net 高效开发之不可错过的实用工具
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .project文件
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /etc/skel 目录作用
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)