求解线性回归方程
程序员文章站
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;
}
上一篇: 二分查找及原理