1 public class linefit
2 {
3 /// <summary>
4 /// 根据离散点计算线性方程【f(x)=ax+b】
5 /// </summary>
6 /// <param name="x">X轴坐标集合</param>
7 /// <param name="y">Y轴坐标集合</param>
8 /// <param name="modulus">线性方程系数,一次 a,常量 b </param>
9 /// <returns>返回True</returns>
10 public static bool CalculateLine(double[] x, double[] y, ref double[] modulus)
11 {
12 double xe, ye, xye, xxe, sx = 0, sy = 0, sxy = 0, sxx = 0, a, b;
13 int count = x.Length;
14 double[,] ar = new double[count, 2];
15
16 for (int i = 0; i < count; i++)
17 {
18 ar[i, 0] = x[i];
19 ar[i, 1] = y[i];
20 }
21
22 for (int m = 0; m < count; m++)
23 {
24 sx = sx + ar[m, 0];
25 sy = sy + ar[m, 1];
26 sxx = sxx + ar[m, 0] * ar[m, 0];
27 sxy = sxy + ar[m, 0] * ar[m, 1];
28 }
29 xe = sx / count;
30 ye = sy / count;
31 xye = sxy / count;
32 xxe = sxx / count;
33 a = Math.Round((xye - xe * ye) / (xxe - xe * xe), 3);
34 b = Math.Round(ye - a * xe,3);
35
36 modulus[0] = a;
37 modulus[1] = b;
38
39 return true;
40 }
41 }