- 直接给出最小二值法线性回归公式,忽略推导过程
2.给出代码
#include <ansi_c.h>
#include<stdint.h>
#include<stddef.h>//***********函数声明***************//
uint8_t DPROC_LinearFitting(float *arrayX, float *arrayY, uint8_t len,float *pRetFactor,float *pRetConstant);
//代码正式开始/*---------------------------------------------------------------------------------------函数原型: void main(void)功 能: 主函数给出实例,得到线性回归函数输入参数: NA输出参数: NA返 回 值: NA 注意事项: NA
---------------------------------------------------------------------------------------*/
void main(void)
{float dataX[4] = {0.14f, 0.602f, 3.953f, 60.84345f};float dataY[4] = {1.0f, 21.0f, 180.0f, 3000.0f};float retFactor, retConstant;uint8_t len=sizeof(dataX)/sizeof(dataX[0]);if(DPROC_LinearFitting(dataX, dataY, len,&retFactor, &retConstant))printf("线性回归函数为:y= %fx + %f", retFactor, retConstant);elseprintf("输入参数有误");getchar();
}/*---------------------------------------------------------------------------------------函数原型: void DPROC_LinearFitting()功 能: 根据输入的多组坐标点的值,获取线性回归函数的系数和截距输入参数: 1、arrayX:坐标点X集合的指针2、arrayY:坐标点Y集合的指针3、len:坐标点的个数输出参数: 1、retFactor:返回的线性回归函数的系数2、retConstant:返回的线性回归函数的截距返 回 值: ==0:失败,因为输入参数非法!=0:成功注意事项: NA
---------------------------------------------------------------------------------------*/
uint8_t DPROC_LinearFitting(float *arrayX, float *arrayY, uint8_t len,float *pRetFactor,float *pRetConstant)
{if(arrayX == NULL || arrayX == NULL || len < 2) return 0;float x, y;float sum_x = 0.0f , sum_y = 0.0f , xySum = 0.0f, x2sum = 0.0f;for(int i = 0 ; i < len ; i++){ x=arrayX[i];y=arrayY[i];sum_x += x;sum_y += y;xySum += x*y;x2sum += x*x;}*pRetFactor=(sum_x*sum_y/len-xySum)/(sum_x*sum_x/len-x2sum);*pRetConstant=(sum_y-(*pRetFactor)*sum_x)/len;return 1;
}
实现结果和EXCEL中线性趋势线结果一模一样,特此记录,留给自己用