代码


/**************************************************************************

Copyright: none

Author: YuanHao Liu

Date:2019-09-14

Description:Solving Linear Regression Equation

**************************************************************************/

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <string>
#include <stdlib.h>

using namespace std;

double x[5000],y[5000];
int n;

double lineFit()
{
    double aver_x=0,aver_y=0;
    double lxx=0,lyy=0,lxy=0;
    for(int i=0;i<n;++i)
    {
        aver_x+=x[i]/n;
        aver_y+=y[i]/n;
    }
    for(int i=0;i<n;++i)
    {
        lxx+=(x[i]-aver_x)*(x[i]-aver_x);
        lxy+=(x[i]-aver_x)*(y[i]-aver_y);
        lyy+=(y[i]-aver_y)*(y[i]-aver_y);
    }
    cout<<endl;
    cout<<"y=a*x+b"<<endl;
    cout<<"a="<<lxy/lxx<<endl;
    cout<<"b="<<aver_y-lxy*aver_x/lxx<<endl;
    return (lxy/sqrt(lxx*lyy));
}

int main()
{
    // 输入文件路径
    cout<<"输入文件x:";
    string in_file_path;
    cin>>in_file_path;

    // 打开文件
    ifstream infile;
    infile.open(in_file_path.data(),ios::in);

    // 判断是否打开成功
    if(!infile.is_open())
    {
        // 若打开失败,终止程序并给出警告信息。
        cout<<"open file is error"<<endl;
        exit(1);
    }
    else
    {
        cout<<"file open success"<<endl;
    }

    // 读取数据x
    int i=0;
    while(infile.good())
    {

        infile>>x[i++];
    }

    // 测试读取数据
    for(int i=0;i<10;++i)
    {
        cout<<x[i]<<endl;
    }
    cout<<"总共"<<i<<"个x数据."<<endl;

    // 关闭文件
    infile.close();



    // 重复上述操作,读取数据y.
    cout<<"输入文件y:";
    cin>>in_file_path;

    infile.open(in_file_path.data(),ios::in);
    if(infile.is_open())
    {
        cout<<"file open success"<<endl;
    }
    else
    {
        cout<<"file open if error"<<endl;
        exit(1);
    }

    i=0;
    while(infile.good())
    {
        infile>>y[i++];
    }
    n=i;
    for(int i=0;i<10;++i)
    {
        cout<<y[i]<<endl;
    }
    cout<<"total y:"<<i<<endl;

    infile.close();

    double r=lineFit();
    cout<<"线性拟合程度:"<<r<<endl;


    return 0;
}