Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2003495
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2015-11-19 22:46:40


点击(此处)折叠或打开

  1. #include "stdafx.h"
  2. #include "process.h"

  3. /*******************************************************************************
  4. 阶乘函数宏定义
  5. *******************************************************************************/
  6. #define my_pow2(x) ((x) * (x))

  7. /*******************************************************************************
  8. 定义一个2行3列的系数矩阵
  9. *******************************************************************************/
  10. static double Para[2][3] = {0.0};

  11. /*******************************************************************************
  12. 系数矩阵的初始化,没有撒谎,真的只有6行 + 一个循环
  13. *******************************************************************************/
  14. static int ParaInit(double* X, double* Y, int Amount)
  15. {
  16.         Para[1][1] = Amount;
  17.         for ( ; Amount; Amount--, X++, Y++)
  18.         {
  19.                 Para[0][0] += my_pow2(*X);
  20.                 Para[0][1] += (*X);
  21.                 Para[0][2] += (*X) * (*Y);
  22.                 Para[1][2] += (*Y);
  23.         }
  24.         Para[1][0] = Para[0][1];
  25.         return 0;
  26. }

  27. /*******************************************************************************
  28. 系数矩阵的运算,没有撒谎,真的只有7行
  29. *******************************************************************************/
  30. static int ParaDeal(void)
  31. {
  32.         Para[0][0] -= Para[1][0] * (Para[0][1] / Para[1][1]);
  33.         Para[0][2] -= Para[1][2] * (Para[0][1] / Para[1][1]);
  34.         Para[0][1] = 0;
  35.         Para[1][2] -= Para[0][2] * (Para[1][0] / Para[0][0]);
  36.         Para[1][0] = 0;
  37.         Para[0][2] /= Para[0][0];
  38.         //Para[0][0] = 1.0;
  39.         Para[1][2] /= Para[1][1];
  40.         //Para[1][1] = 1.0;
  41.         return 0;
  42. }

  43. /***********************************************************************************
  44. 从txt文件里读取double型的X,Y数据
  45. ***********************************************************************************/
  46. static int GetXY(const char* FileName, double* X, double* Y, int* Amount)
  47. {
  48.         FILE* File = fopen(FileName, "r");
  49.         if (!File)
  50.                 return -1;
  51.         for (*Amount = 0; !feof(File); X++, Y++, (*Amount)++)
  52.                 if (2 != fscanf(File, (const char*)"%lf %lf", X, Y))
  53.                         break;
  54.         fclose(File);
  55.         return 0;
  56. }

  57. /*******************************************************************************
  58. *******************************************************************************/
  59. int Test(const char* FileName)
  60. {
  61.         int Amount;
  62.         double BufferX[1024], BufferY[1024];
  63.         if (GetXY(FileName, (double*)BufferX, (double*)BufferY, &Amount))
  64.         {
  65.                 printf("读取数据文件失败!\r\n");
  66.                 return -1;
  67.         }
  68.         printf("读取数据文件成功,共有%d个点!\r\n", Amount);
  69.         ParaInit((double*)BufferX, (double*)BufferY, Amount);
  70.         ParaDeal();
  71.         printf("拟合数据成功,拟合直线为:\r\ny = (%lf) * x + (%lf);\r\n", Para[0][2], Para[1][2]);
  72.         system("pause");
  73.         return 0;
  74. }

  75. int main(int argc, char* argv[])
  76. {
  77.         Test((const char*)"test.txt");
  78.         return 0;
  79. }

阅读(1084) | 评论(0) | 转发(0) |
0

上一篇:xml配置文件

下一篇:VC 模拟量标定

给主人留下些什么吧!~~