• 大小: 2KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: C++  拟合直线  

资源简介

C++最小二乘法拟合直线,根据数据直接计算直线的斜率、截距和相似度,即拟合的好坏。

资源截图

代码片段和文件信息

#include 
#include 


using namespace std;


/*************************************************************************
 * ref:http://blog.csdn.net/pl20140910/article/details/51926886
 最小二乘法拟合直线,y = a*x + b; n组数据; r-相关系数[-11]fabs(r)->1说明xy之间线性关系好,fabs(r)->0,xy之间无线性关系,拟合无意义
 a = (n*C - B*D) / (n*A - B*B)
 b = (A*D - B*C) / (n*A - B*B)
 r = E / F
 其中:
 A = sum(Xi * Xi)
 B = sum(Xi)
 C = sum(Xi * Yi)
 D = sum(Yi)
 E = sum((Xi - Xmean)*(Yi - Ymean))
 F = sqrt(sum((Xi - Xmean)*(Xi - Xmean))) * sqrt(sum((Yi - Ymean)*(Yi - Ymean)))

**************************************************************************/
void LineFitLeastSquares(float *data_x float *data_y int data_n)
{
    float A = 0.0;
    float B = 0.0;
    float C = 0.0;
    float D = 0.0;
    float E = 0.0;
    float F = 0.0;

    for (int i=0; i    {
        A += data_x[i] * data_x[i];
        B += data_x[i];
        C += data_x[i] * data_y[i];
        D += data_y[i];
    }

    // 计算斜率a和截距b
    float a b temp = 0;
    if( temp = (data_n*A - B*B) )// 判断分母不为0
    {
        a = (data_n*C - B*D) / temp;
        b = (A*D - B*C) / temp;
    }
    else
    {
    

评论

共有 条评论