最小二乘法做直线拟合

 

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

*

* 文件名称: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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值