一、最小二乘法(Least Squares):

假设样本集单个样本的线性函数为:

二维直线回归(拟合)算法(一)

为解二元一次方程中的a,b,给上式两边乘以xi得到(也可以两边乘yi):

二维直线回归(拟合)算法(一)

方程组:

 二维直线回归(拟合)算法(一)

解样本集方程组:

二维直线回归(拟合)算法(一)

 

矩阵形式: 

二维直线回归(拟合)算法(一)

 

对矩阵二维直线回归(拟合)算法(一) 求逆:

 二维直线回归(拟合)算法(一) 

 则:

二维直线回归(拟合)算法(一)

二维直线回归(拟合)算法(一)

二维直线回归(拟合)算法(一) 

 1        public static void LeastSquare(List<Point> points, out double a, out double b)
 2         {
 3             int N = points.Count;
 4             if (N < 2)
 5             {
 6                 a = 0;
 7                 b = 0;
 8                 return;
 9             }
10             double X1 = 0, Y1 = 0, X2 = 0, X1Y1 = 0;
11             for (int i = 0; i < N; ++i)
12             {
13                 X2 += points[i].X * points[i].X;
14                 X1 += points[i].X;
15                 X1Y1 += points[i].X * points[i].Y;
16                 Y1 += points[i].Y;
17             }
18             a = (X1Y1 * N - X1 * Y1) / (X2 * N - X1 * X1);
19             b = (X2 * Y1 - X1 * X1Y1) / (X2 * N - X1 * X1);
20         }
View Code

相关文章: