본문 바로가기

프로그래밍/Etc.

Excel Trend 함수 C# 구현로직

엑셀 TREND 함수를 C#으로 구현하는 로직입니다.

회기분석을 EXCEL을 사용해서 썼을텐데 그걸 로직화 시키느라 고생좀 했습니다.

아래의 소스를 가져다 쓰시면 됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
         
public double Trend(double[] known_y, double[] known_x, double new_x)
{
 
     double m, b;
     LeastSquaresFitLinear(known_y, known_x, out m, out b);
 
     List<double> new_y = new List<double>();
 
     double y = (m * new_x) + b;
     new_y.Add(y);
 
 
     return new_y.ToArray()[0];
}
 
public void LeastSquaresFitLinear(double[] known_y, double[] known_x, out double M, out double B)
{
     if (known_y.Length != known_x.Length)
     {
          throw new ArgumentException("arrays are unequal lengths");
     }
 
     int numPoints = known_y.Length;
     double x1, y1, xy, x2, J;
 
     x1 = y1 = xy = x2 = 0.0;
     for (int i = 0; i < numPoints; i++)
     {
          x1 = x1 + known_x[i];
          y1 = y1 + known_y[i];
          xy = xy + known_x[i] * known_y[i];
          x2 = x2 + known_x[i] * known_x[i];
      }
 
      M = B = 0;
      J = ((double)numPoints * x2) - (x1 * x1);
 
      if (J != 0.0)
      {
          M = (((double)numPoints * xy) - (x1 * y1)) / J;
          B = ((y1 * x2) - (x1 * xy)) / J;
 
      }
}
 
cs