본문 바로가기

프로그래밍/자바스크립트

SLOPE, INTERCEPT 구하는 함수

/**
 * Slope 계산
 * 계산식 = sum[(eachX-avrg(Xs))(eachY-avg(Ys))] / sum[(eachX-avg(Xs))(eachX-avg(Xs))]
 */
function getSlope(X, Y) {

if( !Array.isArray(X) || !Array.isArray(Y) ) {
return null;
}

// x 평균 구하기
var sumX = 0.0;
for( var i=0; i<X.length; i++) {
sumX += parseFloat(X[i]);
}
var avgX = sumX / X.length;

// y 평균 구하기
var sumY = 0.0;
for( var i=0; i<Y.length; i++) {
sumY += parseFloat(Y[i]);
}
var avgY = sumY / Y.length;

var numerator = 0.0;
for( var i=0; i<X.length; i++) {
numerator += ((X[i]-avgX)*(Y[i]-avgY));
}

var denominator = 0.0;
for( var i=0; i<Y.length; i++) {
denominator += ((X[i]-avgX)*(X[i]-avgX));
}
var slope = numerator / denominator;

return slope;
}


/**
 * 절편 계산
 * 계산식 = avrg(Xs)-avg(Ys)*slope
 */
function getIntercept(X, Y, slope) {

if( !Array.isArray(X) || !Array.isArray(Y) ) {
return null;
}

if( slope == undefined || slope == null || slope == "" ) {
slope = getSlope(X, Y);
}

if( !(isFloat(slope) || isInt(slope)) ) {
return null;
}

// x 평균 구하기
var sumX = 0.0;
for( var i=0; i<X.length; i++) {
sumX += parseFloat(X[i]);
}
var avgX = sumX / X.length;

// y 평균 구하기
var sumY = 0.0;
for( var i=0; i<Y.length; i++) {
sumY += parseFloat(Y[i]);
}
var avgY = sumY / Y.length;

var intercept = avgY-slope*avgX;

return intercept;
}

function isInt(n){
    return Number(n) === n && n % 1 === 0;
}

function isFloat(n){
    return Number(n) === n && n % 1 !== 0;
}