Least Square(최소 자승법)

Mathematics Algorithm|2023. 2. 26. 23:36
반응형

실험적 데이타를 추출했을 경우 데이타의 경향성을 확인하기 위해 수학적으로 사용하는 직선근사를 C# 코드로 구현한 것입니다.

아래 코드는 추출된 X,Y 좌표 상의 데이타들을 Y축의 상한값과 하한값을 범위로 하여 일차 방정식으로 식을 추출하는 코드 입니다.  

Least Square

public static (double slope, double yIntercept) GetLinearLeastSquaresFit(double[] dataX, double[] dataY, double lowYValue, double highYValue)
{
    double slope=0, yIntercept=0;
    int index = 0 ;
    double count = 0 ;
    double xSummary = 0;
    double ySummary = 0;
    double xxSummary = 0; 
    double xySummary = 0;

    foreach(var Yvalue in dataY)
    {
        if(Yvalue > highYValue) break ;
        if(Yvalue > lowYValue)
        {
            xSummary += dataX[index]; 
            ySummary += Yvalue;
            xxSummary += dataX[index] * dataX[index];
            xySummary += dataX[index] * Yvalue;

            count += 1 ;
        }

        index ++ ;
    }

    if(count > 2)  // 최소한 2개 이상의 점이 있어야 계산이 된다. 
    {
        try
        {
            slope = (xySummary * count - xSummary * ySummary) / (xxSummary * count - xSummary * xSummary); 
            yIntercept = (xySummary * xSummary - ySummary * xxSummary) / (xSummary * xSummary - count * xxSummary); 
        }
        catch
        {
            slope = yIntercept = 0;
        }
    }

    return (slope, yIntercept);  // 기울기와 y 절편값을 리턴합니다. 
}
반응형

댓글()