/*******************************************************************************
*
* 文件名称:main.cpp
* 摘要:最小二乘法做直线拟合
*
* 当前版本:v0.1
* 作者:福柯
* 完成日期:年月日
*
* Copyright (c) 2007,Programming Lab.
* All rights reserved.
*******************************************************************************/
#include <stdlib.h>
#include <iostream>
#include <valarray>
using namespace std;
int main(int argc, char *argv[])
{
//输入数据
cout<<"输入数据项数:";
int num =0;
cin>> num;
valarray<double> data_x(num);
valarray<double> data_y(num);
while (num)
{
cout<< "输入第"<<num<<"项的X:";
cin>>data_x[num-1];
cout<<"输入第"<<num<<"项的Y:";
cin>> data_y[num-1];
num --;
}
cout<<"输入完毕"<<endl;
//计算系数
double A = 0.0;
double B = 0.0;
double C = 0.0;
double D = 0.0;
A = data_y.sum ();
B = data_x.sum ();
C = (data_x * data_y).sum();
D = (data_x * data_x).sum();
double k = (A * B - data_x.size () * C) / (B * B - data_x.size () * D);
double b = (B * C - A * D) / (B * B - data_x.size () * D);
//输出
cout<<"斜率k:"<<k<<endl;
cout<<"截距b:"<<b<<endl;
system("PAUSE");
return 0;
}