线性回归方程

2023-11-10

线性回归方程在嵌入式开发中是非常常用的,尤其在参数校准这块应用非常普遍,无论你是写在上位机代码中,还是直接写在嵌入式软件中。
下面是我在PT100校准中写的关于线性回归方程代码。

/*
线性回归方程公式
平均值XA=(X1+X2+...+XN)/N
平均值YA=(Y1+Y2+...+YN)/N
斜率K=((X1-XA)(Y1-YA)+(X2-XA)(Y2-YA)+...)/((X1-XA)(X1-XA)+(X2-XA)(X2-XA)+...)
截距T=YA-K*XA
*/
#define RES_100_REAL_VALUE 9930//0.01oumu
#define RES_110_REAL_VALUE 11050//0.01oumu
#define RES_120_REAL_VALUE 11850//0.01oumu
#define RES_130_REAL_VALUE 13020//0.01oumu

uint32_t PT100_REAL_RES_VALUEy[4]=
{
RES_100_REAL_VALUE,RES_110_REAL_VALUE,RES_120_REAL_VALUE,RES_130_REAL_VALUE
};

/*
平均值函数
*/
float Average(uint32_t *p_array,uint8_t n_size)
{
	uint32_t temp_sum =0;
	for(uint8_t i=0;i<n_size;i++)
	temp_sum+=p_array[i];
	return temp_sum/n_size;
}
/*
求平均值YN
*/
float REAL_RES_ave=Average(PT100_REAL_RES_VALUEy,sizeof(PT100_REAL_RES_VALUEy)/sizeof(PT100_REAL_RES_VALUEy[0]));

/*
函数功能:求数组各元素的线性回归方程的斜率
入口参数p_get_val为一个数组的首地址
入口参数n_size为数组元素个数
返回数组各元素的线性回归方程的斜率
*/
float PT100_K_CORRECT3(uint32_t *p_get_val,uint8_t n_size)
{
	float temp_k_val;
	float Get_Res_ave;
	
	Get_Res_ave=Average(p_get_val,n_size);//XA
	
	temp_k_val=(float)
		((p_get_val[0]-Get_Res_ave)*(PT100_REAL_RES_VALUEy[0]-REAL_RES_ave)
		+(p_get_val[1]-Get_Res_ave)*(PT100_REAL_RES_VALUEy[1]-REAL_RES_ave)
		+(p_get_val[2]-Get_Res_ave)*(PT100_REAL_RES_VALUEy[2]-REAL_RES_ave)
		+(p_get_val[3]-Get_Res_ave)*(PT100_REAL_RES_VALUEy[3]-REAL_RES_ave))
		/
		((p_get_val[0]-Get_Res_ave)*(p_get_val[0]-Get_Res_ave)
		+(p_get_val[1]-Get_Res_ave)*(p_get_val[1]-Get_Res_ave)
		+(p_get_val[2]-Get_Res_ave)*(p_get_val[2]-Get_Res_ave)
		+(p_get_val[3]-Get_Res_ave)*(p_get_val[3]-Get_Res_ave)
		);//K
	
	return temp_k_val;
}
/*
函数功能:求数组各元素的线性回归方程的截距
入口参数p_get_val为一个数组的首地址
入口参数n_size为数组元素个数
返回数组各元素的线性回归方程的截距
*/
short PT100_T_CORRECT3(uint32_t *p_get_val,uint8_t n_size)
{
	float temp_k_val,Get_Res_ave;
	short temp_t_val;
	
	Get_Res_ave=Average(p_get_val,n_size);//XA
	
	temp_k_val=PT100_K_CORRECT3(p_get_val,n_size);//K
	
	temp_t_val=REAL_RES_ave-temp_k_val*Get_Res_ave;//T
	
	return temp_t_val;
}

今天先弄一个keil编辑器里的源码,后期有时间弄VisualStudio的代码,以及测试代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线性回归方程 的相关文章

  • 《硬件架构的艺术》笔记(二)

    时钟和复位 2 1 同步设计 2 1 1避免使用行波计数器 用触发器来驱动其他触发器的时钟输入端 一般会存在问题 由于第个触发器时钟到g的延而使第二个触发器的时钟输入产生偏 而且不能在每个时钟边沿都激活 用这种方式连接两个以上的触发器就会形
  • Altium Designer 16来自原理图/PCB的各种报错 (持续更新):

    NO1 Net xxx has only one pin 根本原因 在BGA的原理图绘制时 我一般拉出该元件的所有IO的网络 这方便利于我开发其他款板卡 同样也会因为不同板卡的需求不同而造成有些IO并没有使用到 也就是整个原理图中only
  • 软件测试的学习方法

    学习软件测试需要掌握以下几个步骤 1 了解软件测试基础知识 软件测试是指在软件开发过程中 对软件进行验证和确认 以确定其是否符合规定的需求 标准和规范 因此 学习软件测试需要先理解软件测试的定义 分类 流程等基本概念 2 学习软件测试工具
  • 读写锁的实现

    读写锁的实现 待编辑

随机推荐

  • STEM教育课程的发展

    STEM教育本身的定义就是跨学科的整合式教育 科创教育近几年一直是教育领域的重头戏 由机器人和3D打印引发的创新科技教育热潮一直引领着创新教育行业 细分归属STEM教育的范畴 格物斯坦小坦克来说说stem教育课程的发展 STEM教育是全球许
  • 深入解析中间件之-Canal

    canal 阿里巴巴mysql数据库binlog的增量订阅 消费组件 MySQL binlog MySQL主从复制 mysql服务端修改配置并重启 1 2 3 4 5 6 7 8 9 10 11 12 vi etc my cnf mysql
  • Bonita实现的BPM应用系统

    多个领域的组织已经从Bonita的BPM解决方案中受益 用于改进它们的业务流程 世界各地的很多机构在它们的系统中已经成功布署了Bonita 1 Government of the Canary Islands 电子政务系统的BPM Boni
  • Optional int parameter 'folderId' is not present but cannot be translated into a null value due to b

    错误信息 严重 Servlet service for servlet controller in context with path gxbms threw exception Request processing failed nest
  • ungui中mainform以及login窗体的背景设置

    1 打开mainmodule窗体 2 设置mainmodule的background属性 3 设置mainmodule窗体的loginbackground属性 结果
  • 25个恶意JavaScript 库通过NPM官方包仓库分发

    聚焦源代码安全 网罗国内外最新资讯 编译 代码卫士 专栏 供应链安全 数字化时代 软件无处不在 软件如同社会中的 虚拟人 已经成为支撑社会正常运转的最基本元素之一 软件的安全性问题也正在成为当今社会的根本性 基础性问题 随着软件产业的快速发
  • Windows中通过命令行新建文件夹、新建文件

    进大厂 身价翻倍的法宝来了 主讲内容 docker kubernetes 云原生技术 大数据架构 分布式微服务 自动化测试 运维 腾讯课堂 点击进入 网易课堂 点击进入 7月1号 7月29号 8折优惠 7月1号 7月29号 8折优惠 7月1
  • 补码的作用

    补码的作用 避免零在二进制中的歧义 另一个好处就是方便运算 所有运算都能用加法运算器来实现 不再需要减法运算器 其实在计算机中 所有的减法操作都被转化为加法操作 如果想要深入研究 可以看看计算机组成原理 举个简单的例子 正数的补码和反码 原
  • 《Learning CUDA Programming》读书笔记(三)

    CUDA occupancy 一般等于 Active Thread Blocks per Multiprocessor Max Threads per Multiprocessor 分子是用户kernel和GPU硬件条件共同决定的 分母完全
  • Java SPI机制

    一 SPI机制简介 SPI的全名为Service Provider Interface java spi机制的思想 系统里抽象的各个模块 往往有很多不同的实现方案 在面向的对象的设计里 一般推荐模块之间基于接口编程 模块之间不对实现类进行硬
  • 完全分布式Hadoop集群搭建

    环境说明 操作系统 CentOS 8 x86 64 Hadoop版本 2 10 1 节点数 3 服务器规划 node1 node2 node3 199 188 166 111 199 188 166 112 199 188 166 113
  • 去趋势理解(detrend)

    https blog csdn net wokaowokaowokao12345 article details 60138308
  • 开漏输出、推挽输出、上拉电阻的原理及用途

    一 开漏输出 open drain 开漏电路概念中提到的 漏 就是指MOS FET的漏极 开漏主要是为了获得更大的驱动而来的 一般外面需要加上拉电阻 或下拉电阻 开楼电路的内部所有上拉全部断开 若要使用 必须在外部加上拉电阻 这样的话 其驱
  • JavaScript笔记:函数作用域和块作用域

    1 函数中的作用域 考虑如下的代码 function foo a var b 2 一些代码 function bar 更多的代码 var c 3 在这个代码片段中 foo 的作用域中包含了标识符 a b c 和 bar bar 拥有自己的作
  • 软件测试判断题总结

    判断题 1 验收测试是由最终用户来实施的 解析 当软件以项目的形式出现 那么验收测试由最终用户来实施的情况是比较长见的 但是对于产品形式的软件 生产企业内部的验收测试会更多 2 软件测试的目的是尽可能多的找出软件的缺陷 3 Beta测试是验
  • java的前期绑定和后期绑定

    原文地址 http blog sina com cn s blog 600046120100wdza html 程序绑定的概念 绑定指的是一个方法的调用与方法所在的类 方法主体 关联起来 对java来说 绑定分为静态绑定和动态绑定 或者叫做
  • 运算放大器(运放)选型、参数分析以及应用OPA2350

    1 运放选型速记指南 知乎 本文章旨在总结备份 方便以后查询 由于是个人总结 如有不对 欢迎指正 另外 内容大部分来自网络 书籍 和各类手册 如若侵权请告知 马上删帖致歉 运放 作为硬件电路上不可缺失的一部分 生活中也经常出现 因此在这里记
  • GCC同时使用静态库和动态库链接

    一原文连接 http blog csdn net wangzhen209 article details 47153239 GCC同时使用静态库和动态库链接 在应用程序需要连接外部库的情况下 linux默认对库的连接是使用动态库 在找不到动
  • What is tethering and how do you enable tethering?

    https 3g co uk guides tethering everything you need to know What is tethering and how do you enable tethering 30 Sep 201
  • 线性回归方程

    线性回归方程在嵌入式开发中是非常常用的 尤其在参数校准这块应用非常普遍 无论你是写在上位机代码中 还是直接写在嵌入式软件中 下面是我在PT100校准中写的关于线性回归方程代码 线性回归方程公式 平均值XA X1 X2 XN N 平均值YA