当前位置: 首页 >> 程序设计 >> 最小二乘法做直线拟合
 

最小二乘法做直线拟合

作者:      来源:http://blog.csdn.net/Holmescn     发表时间:2007-04-16     浏览次数:      字号:    

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

*

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

}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •