추세선 구하는 메소드 
 

        private Series GetTrendSeries(SeriesList sList)
        {
            Series TrSr = new Series();
            TrSr.SeriesColor = Color.Blue;
            TrSr.ChartType = ChartType.Line;

            double a = 0;
            double b = 0;

            double[,] MatrixL = new double[2, 2];  
            double[,] InverseMatrixL = new double[2, 2];
            double[] MatrixR = new double[2];

            int totalcount = 0;
 
            foreach (Series sr in sList.SeriesCollection)
            {
                foreach (SeriesItem item in sr.items)
                {
                    MatrixL[0, 0] = MatrixL[0, 0] + 1;
                    MatrixL[1, 0] += item.XValue * 1;
                    MatrixL[0, 1] += item.XValue * 1;
                    MatrixL[1, 1] += item.XValue * item.XValue;

                    MatrixR[0] += item.YValue * 1;
                    MatrixR[1] += item.YValue * item.XValue;

                    totalcount++;
                }
            }

            // 역행렬을 만드는 공식에서 ad - bc 체크
            double adMinusbc = MatrixL[0, 0] * MatrixL[1, 1] - MatrixL[1, 0] * MatrixL[0, 1];
 
            if (adMinusbc != 0)
            {
                InverseMatrixL[0, 0] = MatrixL[1, 1] / adMinusbc;
                InverseMatrixL[1, 0] = (MatrixL[1, 0] * (-1)) / adMinusbc;
                InverseMatrixL[0, 1] = (MatrixL[0, 1] * (-1)) / adMinusbc;
                InverseMatrixL[1, 1] = MatrixL[0, 0] / adMinusbc;

                a = (InverseMatrixL[0, 0] * MatrixR[0] + InverseMatrixL[1, 0] * MatrixR[1]);
                b = (InverseMatrixL[0, 1] * MatrixR[0] + InverseMatrixL[1, 1] * MatrixR[1]);
 
                // 해당 시리즈 만들기
                for (int i = 0; i < totalcount; i++)
                {
                    SeriesItem tritem = new SeriesItem();
                    tritem.XValue = i;
                    tritem.YValue = (float)(b * i + a);

                    TrSr.items.Add(tritem);
                }
            }
            else // 나누는 분모가 0이 되므로 불능
            {
                // 해당 시리즈 만들기
                for (int i = 0; i < totalcount; i++)
                {
                    SeriesItem tritem = new SeriesItem();
                    tritem.XValue = i;
                    tritem.YValue = 0;

                    TrSr.items.Add(tritem);
                }
            }

            return TrSr;
        }


위 제공된 메소드를 프로젝트에 삽입하고 

            sList.SeriesCollection.Add(this.GetTrendSeries(sList));

와 같이 본래의 시리즈리스트에 추세션 시리즈를 추가해주면 된다. 

아래 전체 코드 참고하세요.

C#



VB

사업자 정보 표시
히포차트 | 하영대 | 경기도 성남시 수정구 복정동 631-5 401 | 사업자 등록번호 : 129-34-55719 | TEL : 031-751-6673 | Mail : hippochart@gmail.com | 통신판매신고번호 : 제 2010-경기성남-1203호 | 사이버몰의 이용약관 바로가기

Posted by 리바이 병장
,


/* 다음 웹인사이드 로그 분석*/