美文网首页
C++最小二乘计算线性回归方程

C++最小二乘计算线性回归方程

作者: 无聊的CairBin | 来源:发表于2020-04-29 12:13 被阅读0次

    介绍

    用来理解一下数学思路和练习一下代码。即兴而写的,所以没写注释。


    timg2.jpg

    代码

    #include <iostream>
    // #include "Windows.h"
    
    double sum_square_x = 0;
    double sum_x = 0;
    double sum_y = 0;
    double sum_xy = 0;
    int n = 0;
    double ave_x = 0;
    double ave_y = 0;
    double b_ba = 0;
    double a_ba = 0;
    
    using namespace std;
    
    void InputAndSum()
    {
        cout << "请输入n的值" << endl;
        cin >> n;
        cout << " " << endl;
        double data_x = 0;
        double data_y = 0;
        int i = 1;
        while (i <= n)
        {
            cout << "请输入第" << i << "个数据的x值" << endl;
            cin >> data_x;
            cout << " " << endl;
            cout << "请输入第" << i << "个数据的y值" << endl;
            cin >> data_y;
            cout << " " << endl;
    
            sum_x += data_x;
            sum_y += data_y;
            sum_xy += (data_x * data_y);
            sum_square_x += (data_x * data_x);
            
            i++;
        }
    
    }
    
    double Average(double a)
    {
        double ave = a / n;
        return ave;
    }
    
    double B_ba(double calc1,double calc2)
    {
        double square_ave_x = calc1 * calc1;
        double calc3;
        calc3 = (sum_xy - n * calc1 * calc2) / (sum_square_x - n * square_ave_x);
        return calc3;
    }
    
    void A_ba()
    {
        a_ba = ave_y - b_ba * ave_x;
    }
    
    int main()
    {
        InputAndSum();
        ave_x = Average(sum_x);
        ave_y = Average(sum_y);
        b_ba = B_ba(ave_x,ave_y);
        A_ba();
        cout << "---------------------------------" << endl;
        cout << "---------------------------------" << endl;
        cout << "n的值为: " << n << endl;
        cout << "各x的和为: " << sum_x << endl;
        cout << "各y的和为: " << sum_y << endl;
        cout << "各个xy乘积的求和为: " << sum_xy << endl;
        cout << "各个x平方的求和为: " << sum_xy << endl;
        cout << "x的均值为: " << ave_x << endl;
        cout << "y的均值为: " << ave_y << endl;
        cout << "a(ba)为: " << a_ba << endl;
        cout << "b(ba)为: " << b_ba << endl;
        cout << "样本点中心为:(" << ave_x << "," << ave_y << ")" << endl;
        cout << "回归直线方程为  y = " << b_ba << "x + " << "(" << a_ba << ")" << endl;
        cout << "---------------------------------" << endl;
        cout << "---------------------------------" << endl;
        //system("pause");
    
    }
    
    

    相关文章

      网友评论

          本文标题:C++最小二乘计算线性回归方程

          本文链接:https://www.haomeiwen.com/subject/whegwhtx.html