欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

求解线性回归方程

程序员文章站 2024-03-19 22:02:10
...

代码


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

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;
}

相关标签: 随笔 算法

上一篇: 二分查找及原理

下一篇: