ArgMin_Test

http://wzboy.blogbus.com/ 

 

/******************************************************************************/
     (1)int ArgMin(double *inMtrx,int COLUMN,int rowNum,int colNum,double *solution);
       函数功能:用最小二乘法求解方程数多于未知变量的线性方程组的最适解。
       测试代码:
          #define Q 5
          #define ROWNUM 6
          int main()
          {
            double solution[Q-1],eqt[Q][Q]={0};
            double a[ROWNUM][Q]={{3,-2,4,6,-11},{4,3,2,9,-2},{2,6,8,3,4},{2,4,5,3,3},
                                  {0,0,8,6,-20},{3,4,5,6,0}};
            ArgMin(&a[0][0],Q,ROWNUM,Q,&solution[0]);
            for(i=0;i<Q-1;i++) printf("%.14lf\n",solution[i]);
            return 0;
          }
       测试结果:
          eqts:
          42.000000000    38.000000000    61.000000000    84.000000000    -27.000000000
          38.000000000    81.000000000    86.000000000    69.000000000    52.000000000
          61.000000000    86.000000000    198.000000000   159.000000000   -161.000000000
          84.000000000    69.000000000    159.000000000   207.000000000   -183.000000000
          3.00000000000000
          2.00000000000000
          -1.00000000000000
          -2.00000000000000

        说明:a, 待求解的方程组数据:
                {3,-2,4,6,-11},
                {4,3,2,9,-2},
                {2,6,8,3,4},
                {2,4,5,3,3},
                {0,0,8,6,-20},
                {3,4,5,6,0}
                以上数据中共有四个变量,六个方程;
              b, 测试显示的数据中,“eqts”为通过最小二乘法得出的待求解的线性方程组增广矩阵;下面四行为计算求得的解,与实际完全符合。

     (2)int SolveLinearEqts(double *inMtrx,int COLUMN,int rowNum,int colNum,double *solution);
       函数功能:用消元法解N×N的线性方程组(即未知数和方程数相同的方程组)。
       测试代码:
          double b[4][5]={{3,-2,4,6,-11},{4,3,2,9,-2},{2,6,8,3,4},{2,4,5,3,3}};
          double c[5];
          SolveLinearEqts(&b[0][0],5,4,5,&c[0]);
          for(i=0;i<4;i++) printf("%.14lf\n",c[i]);   
       测试结果:
          3.00000000000000
          2.00000000000000
          -1.00000000000000
          -2.00000000000000

       说明:求得的解与实际完全符合。


/******************************************************************************/
  (c)int ArgMin(double *inMtrx,int COLUMN,int rowNum,int colNum,double *solution);
  功能说明:用最小二乘法求解方程数多于未知变量的线性方程组的最适解。
  参数说明:
    (1)inMtrx: 线性方程组以增广矩阵的形式用此数组传入方程;
    (2)COLUMN: 数组inMtrx的列数为COLUMN;
    (3)rowNum: 数组inMtrx中数据的行数;
    (4)colNum: 数组inMtrx中数据的列数;
    (5)solution: 求得方程的解从此参数传出;
    (6)返回值:0,表示方程组无唯一解;1,表示函数正常结束。

  (d)int SolveLinearEqts(double *inMtrx,int COLUMN,int rowNum,int colNum,double *solution);
  功能说明:解N×N的线性方程组(即未知数和方程数相同的方程组)。
  参数说明:
    (1)inMtrx: 线性方程组以增广矩阵的形式用此数组传入方程;
    (2)COLUMN: 数组inMtrx的列数为COLUMN;
    (3)rowNum: 数组inMtrx中数据的行数;
    (4)colNum: 数组inMtrx中数据的列数;
    (5)solution: 求得方程的解从此参数传出;
    (6)返回值:0,表示方程组无唯一解;1,表示函数正常结束。

  (e)int ReduceUnknowns(double *mtrx_tmp,int COLUMN,int rowNo,int colNo,int rowNum,int colNum);
  功能说明:将储存在mtrx_tmp中、表示待求解线性方程组的增广矩阵变换成阶梯形矩阵。每调用函数一次,通过变换矩阵会将其中元素(rowNo,colNo)对应的那一列第rowNo行以下(不包括第rowNo行)的元素全变为0。
  参数说明:
    (1)mtrx_tmp: 储存待求解线性方程组增广矩阵的数组以此参数传入其首地址;
    (2)COLUMN: 储存数据的数组mtrx_tmp列数为COLUMN;
    (3)rowNo: 元素(rowNo,colNo)的行号;
    (4)colNo: 元素(rowNo,colNo)的列号;
    (5)rowNum:  mtrx_tmp指向的数组中数据的行数;
    (6)colNum:  mtrx_tmp指向的数组中数据的列数;
    (7)返回值:0,表示元素(rowNo,colNo)对应的那一列第rowNo行及以下(包括第rowNo行)的元素已经都是0,此时线性方程组没有唯一解;1,表示函数正常结束。